Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
3f024c1a
Commit
3f024c1a
authored
Aug 23, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
parents
a4cce104
dc16aaf2
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
150 additions
and
112 deletions
+150
-112
include/net/ax25.h
include/net/ax25.h
+16
-2
include/net/sock.h
include/net/sock.h
+5
-0
net/ax25/af_ax25.c
net/ax25/af_ax25.c
+13
-14
net/ax25/ax25_route.c
net/ax25/ax25_route.c
+7
-5
net/ax25/ax25_uid.c
net/ax25/ax25_uid.c
+36
-47
net/ipv4/inetpeer.c
net/ipv4/inetpeer.c
+7
-4
net/ipv4/netfilter/ip_queue.c
net/ipv4/netfilter/ip_queue.c
+7
-0
net/ipv4/tcp.c
net/ipv4/tcp.c
+1
-1
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_ipv4.c
+7
-2
net/ipv4/tcp_output.c
net/ipv4/tcp_output.c
+0
-4
net/ipv6/netfilter/ip6_queue.c
net/ipv6/netfilter/ip6_queue.c
+7
-0
net/ipv6/tcp_ipv6.c
net/ipv6/tcp_ipv6.c
+7
-2
net/netrom/af_netrom.c
net/netrom/af_netrom.c
+17
-14
net/rose/af_rose.c
net/rose/af_rose.c
+14
-13
net/rose/rose_route.c
net/rose/rose_route.c
+4
-2
net/sched/sch_generic.c
net/sched/sch_generic.c
+1
-0
net/sctp/proc.c
net/sctp/proc.c
+1
-0
net/sunrpc/auth_gss/gss_krb5_crypto.c
net/sunrpc/auth_gss/gss_krb5_crypto.c
+0
-2
No files found.
include/net/ax25.h
View file @
3f024c1a
...
...
@@ -139,11 +139,25 @@ enum {
#define AX25_DEF_DS_TIMEOUT (3 * 60 * HZ)
/* DAMA timeout 3 minutes */
typedef
struct
ax25_uid_assoc
{
struct
ax25_uid_assoc
*
next
;
struct
hlist_node
uid_node
;
atomic_t
refcount
;
uid_t
uid
;
ax25_address
call
;
}
ax25_uid_assoc
;
#define ax25_uid_for_each(__ax25, node, list) \
hlist_for_each_entry(__ax25, node, list, uid_node)
#define ax25_uid_hold(ax25) \
atomic_inc(&((ax25)->refcount))
static
inline
void
ax25_uid_put
(
ax25_uid_assoc
*
assoc
)
{
if
(
atomic_dec_and_test
(
&
assoc
->
refcount
))
{
kfree
(
assoc
);
}
}
typedef
struct
{
ax25_address
calls
[
AX25_MAX_DIGIS
];
unsigned
char
repeated
[
AX25_MAX_DIGIS
];
...
...
@@ -376,7 +390,7 @@ extern unsigned long ax25_display_timer(struct timer_list *);
/* ax25_uid.c */
extern
int
ax25_uid_policy
;
extern
ax25_
address
*
ax25_findbyuid
(
uid_t
);
extern
ax25_
uid_assoc
*
ax25_findbyuid
(
uid_t
);
extern
int
ax25_uid_ioctl
(
int
,
struct
sockaddr_ax25
*
);
extern
struct
file_operations
ax25_uid_fops
;
extern
void
ax25_uid_free
(
void
);
...
...
include/net/sock.h
View file @
3f024c1a
...
...
@@ -384,6 +384,11 @@ enum sock_flags {
SOCK_QUEUE_SHRUNK
,
/* write queue has been shrunk recently */
};
static
inline
void
sock_copy_flags
(
struct
sock
*
nsk
,
struct
sock
*
osk
)
{
nsk
->
sk_flags
=
osk
->
sk_flags
;
}
static
inline
void
sock_set_flag
(
struct
sock
*
sk
,
enum
sock_flags
flag
)
{
__set_bit
(
flag
,
&
sk
->
sk_flags
);
...
...
net/ax25/af_ax25.c
View file @
3f024c1a
...
...
@@ -875,12 +875,7 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
sk
->
sk_sndbuf
=
osk
->
sk_sndbuf
;
sk
->
sk_state
=
TCP_ESTABLISHED
;
sk
->
sk_sleep
=
osk
->
sk_sleep
;
if
(
sock_flag
(
osk
,
SOCK_DBG
))
sock_set_flag
(
sk
,
SOCK_DBG
);
if
(
sock_flag
(
osk
,
SOCK_ZAPPED
))
sock_set_flag
(
sk
,
SOCK_ZAPPED
);
sock_copy_flags
(
sk
,
osk
);
oax25
=
ax25_sk
(
osk
);
...
...
@@ -1007,7 +1002,8 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
struct
sock
*
sk
=
sock
->
sk
;
struct
full_sockaddr_ax25
*
addr
=
(
struct
full_sockaddr_ax25
*
)
uaddr
;
ax25_dev
*
ax25_dev
=
NULL
;
ax25_address
*
call
;
ax25_uid_assoc
*
user
;
ax25_address
call
;
ax25_cb
*
ax25
;
int
err
=
0
;
...
...
@@ -1026,9 +1022,15 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
if
(
addr
->
fsa_ax25
.
sax25_family
!=
AF_AX25
)
return
-
EINVAL
;
call
=
ax25_findbyuid
(
current
->
euid
);
if
(
call
==
NULL
&&
ax25_uid_policy
&&
!
capable
(
CAP_NET_ADMIN
))
{
return
-
EACCES
;
user
=
ax25_findbyuid
(
current
->
euid
);
if
(
user
)
{
call
=
user
->
call
;
ax25_uid_put
(
user
);
}
else
{
if
(
ax25_uid_policy
&&
!
capable
(
CAP_NET_ADMIN
))
return
-
EACCES
;
call
=
addr
->
fsa_ax25
.
sax25_call
;
}
lock_sock
(
sk
);
...
...
@@ -1039,10 +1041,7 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
goto
out
;
}
if
(
call
==
NULL
)
ax25
->
source_addr
=
addr
->
fsa_ax25
.
sax25_call
;
else
ax25
->
source_addr
=
*
call
;
ax25
->
source_addr
=
call
;
/*
* User already set interface with SO_BINDTODEVICE
...
...
net/ax25/ax25_route.c
View file @
3f024c1a
...
...
@@ -422,8 +422,8 @@ static inline void ax25_adjust_path(ax25_address *addr, ax25_digi *digipeat)
*/
int
ax25_rt_autobind
(
ax25_cb
*
ax25
,
ax25_address
*
addr
)
{
ax25_uid_assoc
*
user
;
ax25_route
*
ax25_rt
;
ax25_address
*
call
;
int
err
;
if
((
ax25_rt
=
ax25_get_route
(
addr
,
NULL
))
==
NULL
)
...
...
@@ -434,16 +434,18 @@ int ax25_rt_autobind(ax25_cb *ax25, ax25_address *addr)
goto
put
;
}
if
((
call
=
ax25_findbyuid
(
current
->
euid
))
==
NULL
)
{
user
=
ax25_findbyuid
(
current
->
euid
);
if
(
user
)
{
ax25
->
source_addr
=
user
->
call
;
ax25_uid_put
(
user
);
}
else
{
if
(
ax25_uid_policy
&&
!
capable
(
CAP_NET_BIND_SERVICE
))
{
err
=
-
EPERM
;
goto
put
;
}
call
=
(
ax25_address
*
)
ax25
->
ax25_dev
->
dev
->
dev_addr
;
ax25
->
source_addr
=
*
(
ax25_address
*
)
ax25
->
ax25_dev
->
dev
->
dev_addr
;
}
ax25
->
source_addr
=
*
call
;
if
(
ax25_rt
->
digipeat
!=
NULL
)
{
if
((
ax25
->
digipeat
=
kmalloc
(
sizeof
(
ax25_digi
),
GFP_ATOMIC
))
==
NULL
)
{
err
=
-
ENOMEM
;
...
...
net/ax25/ax25_uid.c
View file @
3f024c1a
...
...
@@ -28,6 +28,7 @@
#include <linux/fcntl.h>
#include <linux/mm.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <linux/notifier.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
...
...
@@ -41,38 +42,41 @@
* Callsign/UID mapper. This is in kernel space for security on multi-amateur machines.
*/
static
ax25_uid_assoc
*
ax25_uid_list
;
HLIST_HEAD
(
ax25_uid_list
)
;
static
DEFINE_RWLOCK
(
ax25_uid_lock
);
int
ax25_uid_policy
=
0
;
ax25_
address
*
ax25_findbyuid
(
uid_t
uid
)
ax25_
uid_assoc
*
ax25_findbyuid
(
uid_t
uid
)
{
ax25_uid_assoc
*
ax25_uid
;
ax25_address
*
res
=
NULL
;
ax25_uid_assoc
*
ax25_uid
,
*
res
=
NULL
;
struct
hlist_node
*
node
;
read_lock
(
&
ax25_uid_lock
);
for
(
ax25_uid
=
ax25_uid_list
;
ax25_uid
!=
NULL
;
ax25_uid
=
ax25_uid
->
nex
t
)
{
ax25_uid_for_each
(
ax25_uid
,
node
,
&
ax25_uid_lis
t
)
{
if
(
ax25_uid
->
uid
==
uid
)
{
res
=
&
ax25_uid
->
call
;
ax25_uid_hold
(
ax25_uid
);
res
=
ax25_uid
;
break
;
}
}
read_unlock
(
&
ax25_uid_lock
);
return
NULL
;
return
res
;
}
int
ax25_uid_ioctl
(
int
cmd
,
struct
sockaddr_ax25
*
sax
)
{
ax25_uid_assoc
*
s
,
*
ax25_uid
;
ax25_uid_assoc
*
ax25_uid
;
struct
hlist_node
*
node
;
ax25_uid_assoc
*
user
;
unsigned
long
res
;
switch
(
cmd
)
{
case
SIOCAX25GETUID
:
res
=
-
ENOENT
;
read_lock
(
&
ax25_uid_lock
);
for
(
ax25_uid
=
ax25_uid_list
;
ax25_uid
!=
NULL
;
ax25_uid
=
ax25_uid
->
nex
t
)
{
ax25_uid_for_each
(
ax25_uid
,
node
,
&
ax25_uid_lis
t
)
{
if
(
ax25cmp
(
&
sax
->
sax25_call
,
&
ax25_uid
->
call
)
==
0
)
{
res
=
ax25_uid
->
uid
;
break
;
...
...
@@ -85,19 +89,22 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
case
SIOCAX25ADDUID
:
if
(
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
if
(
ax25_findbyuid
(
sax
->
sax25_uid
))
user
=
ax25_findbyuid
(
sax
->
sax25_uid
);
if
(
user
)
{
ax25_uid_put
(
user
);
return
-
EEXIST
;
}
if
(
sax
->
sax25_uid
==
0
)
return
-
EINVAL
;
if
((
ax25_uid
=
kmalloc
(
sizeof
(
*
ax25_uid
),
GFP_KERNEL
))
==
NULL
)
return
-
ENOMEM
;
atomic_set
(
&
ax25_uid
->
refcount
,
1
);
ax25_uid
->
uid
=
sax
->
sax25_uid
;
ax25_uid
->
call
=
sax
->
sax25_call
;
write_lock
(
&
ax25_uid_lock
);
ax25_uid
->
next
=
ax25_uid_list
;
ax25_uid_list
=
ax25_uid
;
hlist_add_head
(
&
ax25_uid
->
uid_node
,
&
ax25_uid_list
);
write_unlock
(
&
ax25_uid_lock
);
return
0
;
...
...
@@ -106,34 +113,21 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
if
(
!
capable
(
CAP_NET_ADMIN
))
return
-
EPERM
;
ax25_uid
=
NULL
;
write_lock
(
&
ax25_uid_lock
);
for
(
ax25_uid
=
ax25_uid_list
;
ax25_uid
!=
NULL
;
ax25_uid
=
ax25_uid
->
nex
t
)
{
if
(
ax25cmp
(
&
sax
->
sax25_call
,
&
ax25_uid
->
call
)
==
0
)
{
ax25_uid_for_each
(
ax25_uid
,
node
,
&
ax25_uid_lis
t
)
{
if
(
ax25cmp
(
&
sax
->
sax25_call
,
&
ax25_uid
->
call
)
==
0
)
break
;
}
}
if
(
ax25_uid
==
NULL
)
{
write_unlock
(
&
ax25_uid_lock
);
return
-
ENOENT
;
}
if
((
s
=
ax25_uid_list
)
==
ax25_uid
)
{
ax25_uid_list
=
s
->
next
;
write_unlock
(
&
ax25_uid_lock
);
kfree
(
ax25_uid
);
return
0
;
}
while
(
s
!=
NULL
&&
s
->
next
!=
NULL
)
{
if
(
s
->
next
==
ax25_uid
)
{
s
->
next
=
ax25_uid
->
next
;
write_unlock
(
&
ax25_uid_lock
);
kfree
(
ax25_uid
);
return
0
;
}
s
=
s
->
next
;
}
hlist_del_init
(
&
ax25_uid
->
uid_node
);
ax25_uid_put
(
ax25_uid
);
write_unlock
(
&
ax25_uid_lock
);
return
-
ENOENT
;
return
0
;
default:
return
-
EINVAL
;
...
...
@@ -147,13 +141,11 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
static
void
*
ax25_uid_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
{
struct
ax25_uid_assoc
*
pt
;
int
i
=
1
;
struct
hlist_node
*
node
;
int
i
=
0
;
read_lock
(
&
ax25_uid_lock
);
if
(
*
pos
==
0
)
return
SEQ_START_TOKEN
;
for
(
pt
=
ax25_uid_list
;
pt
!=
NULL
;
pt
=
pt
->
next
)
{
ax25_uid_for_each
(
pt
,
node
,
&
ax25_uid_list
)
{
if
(
i
==
*
pos
)
return
pt
;
++
i
;
...
...
@@ -164,8 +156,9 @@ static void *ax25_uid_seq_start(struct seq_file *seq, loff_t *pos)
static
void
*
ax25_uid_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
{
++*
pos
;
return
(
v
==
SEQ_START_TOKEN
)
?
ax25_uid_list
:
((
struct
ax25_uid_assoc
*
)
v
)
->
next
;
return
hlist_entry
(((
ax25_uid_assoc
*
)
v
)
->
uid_node
.
next
,
ax25_uid_assoc
,
uid_node
);
}
static
void
ax25_uid_seq_stop
(
struct
seq_file
*
seq
,
void
*
v
)
...
...
@@ -179,7 +172,6 @@ static int ax25_uid_seq_show(struct seq_file *seq, void *v)
seq_printf
(
seq
,
"Policy: %d
\n
"
,
ax25_uid_policy
);
else
{
struct
ax25_uid_assoc
*
pt
=
v
;
seq_printf
(
seq
,
"%6d %s
\n
"
,
pt
->
uid
,
ax2asc
(
&
pt
->
call
));
}
...
...
@@ -213,16 +205,13 @@ struct file_operations ax25_uid_fops = {
*/
void
__exit
ax25_uid_free
(
void
)
{
ax25_uid_assoc
*
s
,
*
ax25_uid
;
ax25_uid_assoc
*
ax25_uid
;
struct
hlist_node
*
node
;
write_lock
(
&
ax25_uid_lock
);
ax25_uid
=
ax25_uid_list
;
while
(
ax25_uid
!=
NULL
)
{
s
=
ax25_uid
;
ax25_uid
=
ax25_uid
->
next
;
kfree
(
s
);
ax25_uid_for_each
(
ax25_uid
,
node
,
&
ax25_uid_list
)
{
hlist_del_init
(
&
ax25_uid
->
uid_node
);
ax25_uid_put
(
ax25_uid
);
}
ax25_uid_list
=
NULL
;
write_unlock
(
&
ax25_uid_lock
);
}
net/ipv4/inetpeer.c
View file @
3f024c1a
...
...
@@ -450,10 +450,13 @@ static void peer_check_expire(unsigned long dummy)
/* Trigger the timer after inet_peer_gc_mintime .. inet_peer_gc_maxtime
* interval depending on the total number of entries (more entries,
* less interval). */
peer_periodic_timer
.
expires
=
jiffies
+
inet_peer_gc_maxtime
-
(
inet_peer_gc_maxtime
-
inet_peer_gc_mintime
)
/
HZ
*
peer_total
/
inet_peer_threshold
*
HZ
;
if
(
peer_total
>=
inet_peer_threshold
)
peer_periodic_timer
.
expires
=
jiffies
+
inet_peer_gc_mintime
;
else
peer_periodic_timer
.
expires
=
jiffies
+
inet_peer_gc_maxtime
-
(
inet_peer_gc_maxtime
-
inet_peer_gc_mintime
)
/
HZ
*
peer_total
/
inet_peer_threshold
*
HZ
;
add_timer
(
&
peer_periodic_timer
);
}
...
...
net/ipv4/netfilter/ip_queue.c
View file @
3f024c1a
...
...
@@ -214,6 +214,12 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp)
break
;
case
IPQ_COPY_PACKET
:
if
(
entry
->
skb
->
ip_summed
==
CHECKSUM_HW
&&
(
*
errp
=
skb_checksum_help
(
entry
->
skb
,
entry
->
info
->
outdev
==
NULL
)))
{
read_unlock_bh
(
&
queue_lock
);
return
NULL
;
}
if
(
copy_range
==
0
||
copy_range
>
entry
->
skb
->
len
)
data_len
=
entry
->
skb
->
len
;
else
...
...
@@ -385,6 +391,7 @@ ipq_mangle_ipv4(ipq_verdict_msg_t *v, struct ipq_queue_entry *e)
if
(
!
skb_ip_make_writable
(
&
e
->
skb
,
v
->
data_len
))
return
-
ENOMEM
;
memcpy
(
e
->
skb
->
data
,
v
->
payload
,
v
->
data_len
);
e
->
skb
->
ip_summed
=
CHECKSUM_NONE
;
e
->
skb
->
nfcache
|=
NFC_ALTERED
;
/*
...
...
net/ipv4/tcp.c
View file @
3f024c1a
...
...
@@ -584,7 +584,7 @@ static inline void skb_entail(struct sock *sk, struct tcp_sock *tp,
sk_charge_skb
(
sk
,
skb
);
if
(
!
sk
->
sk_send_head
)
sk
->
sk_send_head
=
skb
;
else
if
(
tp
->
nonagle
&
TCP_NAGLE_PUSH
)
if
(
tp
->
nonagle
&
TCP_NAGLE_PUSH
)
tp
->
nonagle
&=
~
TCP_NAGLE_PUSH
;
}
...
...
net/ipv4/tcp_ipv4.c
View file @
3f024c1a
...
...
@@ -242,9 +242,14 @@ static int tcp_v4_get_port(struct sock *sk, unsigned short snum)
tcp_port_rover
=
rover
;
spin_unlock
(
&
tcp_portalloc_lock
);
/* Exhausted local port range during search? */
/* Exhausted local port range during search? It is not
* possible for us to be holding one of the bind hash
* locks if this test triggers, because if 'remaining'
* drops to zero, we broke out of the do/while loop at
* the top level, not from the 'break;' statement.
*/
ret
=
1
;
if
(
remaining
<=
0
)
if
(
unlikely
(
remaining
<=
0
)
)
goto
fail
;
/* OK, here is the one we will use. HEAD is
...
...
net/ipv4/tcp_output.c
View file @
3f024c1a
...
...
@@ -925,10 +925,6 @@ static int tcp_tso_should_defer(struct sock *sk, struct tcp_sock *tp, struct sk_
limit
=
min
(
send_win
,
cong_win
);
/* If sk_send_head can be sent fully now, just do it. */
if
(
skb
->
len
<=
limit
)
return
0
;
if
(
sysctl_tcp_tso_win_divisor
)
{
u32
chunk
=
min
(
tp
->
snd_wnd
,
tp
->
snd_cwnd
*
tp
->
mss_cache
);
...
...
net/ipv6/netfilter/ip6_queue.c
View file @
3f024c1a
...
...
@@ -211,6 +211,12 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp)
break
;
case
IPQ_COPY_PACKET
:
if
(
entry
->
skb
->
ip_summed
==
CHECKSUM_HW
&&
(
*
errp
=
skb_checksum_help
(
entry
->
skb
,
entry
->
info
->
outdev
==
NULL
)))
{
read_unlock_bh
(
&
queue_lock
);
return
NULL
;
}
if
(
copy_range
==
0
||
copy_range
>
entry
->
skb
->
len
)
data_len
=
entry
->
skb
->
len
;
else
...
...
@@ -381,6 +387,7 @@ ipq_mangle_ipv6(ipq_verdict_msg_t *v, struct ipq_queue_entry *e)
if
(
!
skb_ip_make_writable
(
&
e
->
skb
,
v
->
data_len
))
return
-
ENOMEM
;
memcpy
(
e
->
skb
->
data
,
v
->
payload
,
v
->
data_len
);
e
->
skb
->
ip_summed
=
CHECKSUM_NONE
;
e
->
skb
->
nfcache
|=
NFC_ALTERED
;
/*
...
...
net/ipv6/tcp_ipv6.c
View file @
3f024c1a
...
...
@@ -158,9 +158,14 @@ static int tcp_v6_get_port(struct sock *sk, unsigned short snum)
tcp_port_rover
=
rover
;
spin_unlock
(
&
tcp_portalloc_lock
);
/* Exhausted local port range during search? */
/* Exhausted local port range during search? It is not
* possible for us to be holding one of the bind hash
* locks if this test triggers, because if 'remaining'
* drops to zero, we broke out of the do/while loop at
* the top level, not from the 'break;' statement.
*/
ret
=
1
;
if
(
remaining
<=
0
)
if
(
unlikely
(
remaining
<=
0
)
)
goto
fail
;
/* OK, here is the one we will use. */
...
...
net/netrom/af_netrom.c
View file @
3f024c1a
...
...
@@ -459,12 +459,7 @@ static struct sock *nr_make_new(struct sock *osk)
sk
->
sk_sndbuf
=
osk
->
sk_sndbuf
;
sk
->
sk_state
=
TCP_ESTABLISHED
;
sk
->
sk_sleep
=
osk
->
sk_sleep
;
if
(
sock_flag
(
osk
,
SOCK_ZAPPED
))
sock_set_flag
(
sk
,
SOCK_ZAPPED
);
if
(
sock_flag
(
osk
,
SOCK_DBG
))
sock_set_flag
(
sk
,
SOCK_DBG
);
sock_copy_flags
(
sk
,
osk
);
skb_queue_head_init
(
&
nr
->
ack_queue
);
skb_queue_head_init
(
&
nr
->
reseq_queue
);
...
...
@@ -541,7 +536,8 @@ static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
struct
nr_sock
*
nr
=
nr_sk
(
sk
);
struct
full_sockaddr_ax25
*
addr
=
(
struct
full_sockaddr_ax25
*
)
uaddr
;
struct
net_device
*
dev
;
ax25_address
*
user
,
*
source
;
ax25_uid_assoc
*
user
;
ax25_address
*
source
;
lock_sock
(
sk
);
if
(
!
sock_flag
(
sk
,
SOCK_ZAPPED
))
{
...
...
@@ -580,16 +576,19 @@ static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
}
else
{
source
=
&
addr
->
fsa_ax25
.
sax25_call
;
if
((
user
=
ax25_findbyuid
(
current
->
euid
))
==
NULL
)
{
user
=
ax25_findbyuid
(
current
->
euid
);
if
(
user
)
{
nr
->
user_addr
=
user
->
call
;
ax25_uid_put
(
user
);
}
else
{
if
(
ax25_uid_policy
&&
!
capable
(
CAP_NET_BIND_SERVICE
))
{
release_sock
(
sk
);
dev_put
(
dev
);
return
-
EPERM
;
}
user
=
source
;
nr
->
user_addr
=
*
source
;
}
nr
->
user_addr
=
*
user
;
nr
->
source_addr
=
*
source
;
}
...
...
@@ -609,7 +608,8 @@ static int nr_connect(struct socket *sock, struct sockaddr *uaddr,
struct
sock
*
sk
=
sock
->
sk
;
struct
nr_sock
*
nr
=
nr_sk
(
sk
);
struct
sockaddr_ax25
*
addr
=
(
struct
sockaddr_ax25
*
)
uaddr
;
ax25_address
*
user
,
*
source
=
NULL
;
ax25_address
*
source
=
NULL
;
ax25_uid_assoc
*
user
;
struct
net_device
*
dev
;
lock_sock
(
sk
);
...
...
@@ -650,16 +650,19 @@ static int nr_connect(struct socket *sock, struct sockaddr *uaddr,
}
source
=
(
ax25_address
*
)
dev
->
dev_addr
;
if
((
user
=
ax25_findbyuid
(
current
->
euid
))
==
NULL
)
{
user
=
ax25_findbyuid
(
current
->
euid
);
if
(
user
)
{
nr
->
user_addr
=
user
->
call
;
ax25_uid_put
(
user
);
}
else
{
if
(
ax25_uid_policy
&&
!
capable
(
CAP_NET_ADMIN
))
{
dev_put
(
dev
);
release_sock
(
sk
);
return
-
EPERM
;
}
user
=
source
;
nr
->
user_addr
=
*
source
;
}
nr
->
user_addr
=
*
user
;
nr
->
source_addr
=
*
source
;
nr
->
device
=
dev
;
...
...
net/rose/af_rose.c
View file @
3f024c1a
...
...
@@ -556,12 +556,7 @@ static struct sock *rose_make_new(struct sock *osk)
sk
->
sk_sndbuf
=
osk
->
sk_sndbuf
;
sk
->
sk_state
=
TCP_ESTABLISHED
;
sk
->
sk_sleep
=
osk
->
sk_sleep
;
if
(
sock_flag
(
osk
,
SOCK_ZAPPED
))
sock_set_flag
(
sk
,
SOCK_ZAPPED
);
if
(
sock_flag
(
osk
,
SOCK_DBG
))
sock_set_flag
(
sk
,
SOCK_DBG
);
sock_copy_flags
(
sk
,
osk
);
init_timer
(
&
rose
->
timer
);
init_timer
(
&
rose
->
idletimer
);
...
...
@@ -631,7 +626,8 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
struct
rose_sock
*
rose
=
rose_sk
(
sk
);
struct
sockaddr_rose
*
addr
=
(
struct
sockaddr_rose
*
)
uaddr
;
struct
net_device
*
dev
;
ax25_address
*
user
,
*
source
;
ax25_address
*
source
;
ax25_uid_assoc
*
user
;
int
n
;
if
(
!
sock_flag
(
sk
,
SOCK_ZAPPED
))
...
...
@@ -656,14 +652,17 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
source
=
&
addr
->
srose_call
;
if
((
user
=
ax25_findbyuid
(
current
->
euid
))
==
NULL
)
{
user
=
ax25_findbyuid
(
current
->
euid
);
if
(
user
)
{
rose
->
source_call
=
user
->
call
;
ax25_uid_put
(
user
);
}
else
{
if
(
ax25_uid_policy
&&
!
capable
(
CAP_NET_BIND_SERVICE
))
return
-
EACCES
;
user
=
source
;
rose
->
source_call
=
*
source
;
}
rose
->
source_addr
=
addr
->
srose_addr
;
rose
->
source_call
=
*
user
;
rose
->
device
=
dev
;
rose
->
source_ndigis
=
addr
->
srose_ndigis
;
...
...
@@ -690,8 +689,8 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le
struct
rose_sock
*
rose
=
rose_sk
(
sk
);
struct
sockaddr_rose
*
addr
=
(
struct
sockaddr_rose
*
)
uaddr
;
unsigned
char
cause
,
diagnostic
;
ax25_address
*
user
;
struct
net_device
*
dev
;
ax25_uid_assoc
*
user
;
int
n
;
if
(
sk
->
sk_state
==
TCP_ESTABLISHED
&&
sock
->
state
==
SS_CONNECTING
)
{
...
...
@@ -741,12 +740,14 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le
if
((
dev
=
rose_dev_first
())
==
NULL
)
return
-
ENETUNREACH
;
if
((
user
=
ax25_findbyuid
(
current
->
euid
))
==
NULL
)
user
=
ax25_findbyuid
(
current
->
euid
);
if
(
!
user
)
return
-
EINVAL
;
memcpy
(
&
rose
->
source_addr
,
dev
->
dev_addr
,
ROSE_ADDR_LEN
);
rose
->
source_call
=
*
user
;
rose
->
source_call
=
user
->
call
;
rose
->
device
=
dev
;
ax25_uid_put
(
user
);
rose_insert_socket
(
sk
);
/* Finish the bind */
}
...
...
net/rose/rose_route.c
View file @
3f024c1a
...
...
@@ -994,8 +994,10 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
* 1. The frame isn't for us,
* 2. It isn't "owned" by any existing route.
*/
if
(
frametype
!=
ROSE_CALL_REQUEST
)
/* XXX */
return
0
;
if
(
frametype
!=
ROSE_CALL_REQUEST
)
{
/* XXX */
ret
=
0
;
goto
out
;
}
len
=
(((
skb
->
data
[
3
]
>>
4
)
&
0x0F
)
+
1
)
/
2
;
len
+=
(((
skb
->
data
[
3
]
>>
0
)
&
0x0F
)
+
1
)
/
2
;
...
...
net/sched/sch_generic.c
View file @
3f024c1a
...
...
@@ -438,6 +438,7 @@ struct Qdisc * qdisc_create_dflt(struct net_device *dev, struct Qdisc_ops *ops)
if
(
!
ops
->
init
||
ops
->
init
(
sch
,
NULL
)
==
0
)
return
sch
;
qdisc_destroy
(
sch
);
errout:
return
NULL
;
}
...
...
net/sctp/proc.c
View file @
3f024c1a
...
...
@@ -57,6 +57,7 @@ static struct snmp_mib sctp_snmp_list[] = {
SNMP_MIB_ITEM
(
"SctpReasmUsrMsgs"
,
SCTP_MIB_REASMUSRMSGS
),
SNMP_MIB_ITEM
(
"SctpOutSCTPPacks"
,
SCTP_MIB_OUTSCTPPACKS
),
SNMP_MIB_ITEM
(
"SctpInSCTPPacks"
,
SCTP_MIB_INSCTPPACKS
),
SNMP_MIB_SENTINEL
};
/* Return the current value of a particular entry in the mib by adding its
...
...
net/sunrpc/auth_gss/gss_krb5_crypto.c
View file @
3f024c1a
...
...
@@ -185,9 +185,7 @@ make_checksum(s32 cksumtype, char *header, int hdrlen, struct xdr_buf *body,
sg
->
page
=
body
->
pages
[
i
];
sg
->
offset
=
offset
;
sg
->
length
=
thislen
;
kmap
(
sg
->
page
);
/* XXX kmap_atomic? */
crypto_digest_update
(
tfm
,
sg
,
1
);
kunmap
(
sg
->
page
);
len
-=
thislen
;
i
++
;
offset
=
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment