diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:55:01 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:55:01 -0500 |
commit | d7fc02c7bae7b1cf69269992cf880a43a350cdaa (patch) | |
tree | a43d56fa72913a1cc98a0bbebe054d08581b3a7c /net/can/af_can.c | |
parent | ee1262dbc65ce0b6234a915d8432171e8d77f518 (diff) | |
parent | 28b4d5cc17c20786848cdc07b7ea237a309776bb (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1815 commits)
mac80211: fix reorder buffer release
iwmc3200wifi: Enable wimax core through module parameter
iwmc3200wifi: Add wifi-wimax coexistence mode as a module parameter
iwmc3200wifi: Coex table command does not expect a response
iwmc3200wifi: Update wiwi priority table
iwlwifi: driver version track kernel version
iwlwifi: indicate uCode type when fail dump error/event log
iwl3945: remove duplicated event logging code
b43: fix two warnings
ipw2100: fix rebooting hang with driver loaded
cfg80211: indent regulatory messages with spaces
iwmc3200wifi: fix NULL pointer dereference in pmkid update
mac80211: Fix TX status reporting for injected data frames
ath9k: enable 2GHz band only if the device supports it
airo: Fix integer overflow warning
rt2x00: Fix padding bug on L2PAD devices.
WE: Fix set events not propagated
b43legacy: avoid PPC fault during resume
b43: avoid PPC fault during resume
tcp: fix a timewait refcnt race
...
Fix up conflicts due to sysctl cleanups (dead sysctl_check code and
CTL_UNNUMBERED removed) in
kernel/sysctl_check.c
net/ipv4/sysctl_net_ipv4.c
net/ipv6/addrconf.c
net/sctp/sysctl.c
Diffstat (limited to 'net/can/af_can.c')
-rw-r--r-- | net/can/af_can.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/net/can/af_can.c b/net/can/af_can.c index 606832115674..51adc4c2b860 100644 --- a/net/can/af_can.c +++ b/net/can/af_can.c | |||
@@ -114,7 +114,8 @@ static void can_sock_destruct(struct sock *sk) | |||
114 | skb_queue_purge(&sk->sk_receive_queue); | 114 | skb_queue_purge(&sk->sk_receive_queue); |
115 | } | 115 | } |
116 | 116 | ||
117 | static int can_create(struct net *net, struct socket *sock, int protocol) | 117 | static int can_create(struct net *net, struct socket *sock, int protocol, |
118 | int kern) | ||
118 | { | 119 | { |
119 | struct sock *sk; | 120 | struct sock *sk; |
120 | struct can_proto *cp; | 121 | struct can_proto *cp; |
@@ -125,7 +126,7 @@ static int can_create(struct net *net, struct socket *sock, int protocol) | |||
125 | if (protocol < 0 || protocol >= CAN_NPROTO) | 126 | if (protocol < 0 || protocol >= CAN_NPROTO) |
126 | return -EINVAL; | 127 | return -EINVAL; |
127 | 128 | ||
128 | if (net != &init_net) | 129 | if (!net_eq(net, &init_net)) |
129 | return -EAFNOSUPPORT; | 130 | return -EAFNOSUPPORT; |
130 | 131 | ||
131 | #ifdef CONFIG_MODULES | 132 | #ifdef CONFIG_MODULES |
@@ -160,11 +161,6 @@ static int can_create(struct net *net, struct socket *sock, int protocol) | |||
160 | goto errout; | 161 | goto errout; |
161 | } | 162 | } |
162 | 163 | ||
163 | if (cp->capability >= 0 && !capable(cp->capability)) { | ||
164 | err = -EPERM; | ||
165 | goto errout; | ||
166 | } | ||
167 | |||
168 | sock->ops = cp->ops; | 164 | sock->ops = cp->ops; |
169 | 165 | ||
170 | sk = sk_alloc(net, PF_CAN, GFP_KERNEL, cp->prot); | 166 | sk = sk_alloc(net, PF_CAN, GFP_KERNEL, cp->prot); |
@@ -379,8 +375,8 @@ static struct hlist_head *find_rcv_list(canid_t *can_id, canid_t *mask, | |||
379 | return &d->rx[RX_ALL]; | 375 | return &d->rx[RX_ALL]; |
380 | 376 | ||
381 | /* extra filterlists for the subscription of a single non-RTR can_id */ | 377 | /* extra filterlists for the subscription of a single non-RTR can_id */ |
382 | if (((*mask & CAN_EFF_RTR_FLAGS) == CAN_EFF_RTR_FLAGS) | 378 | if (((*mask & CAN_EFF_RTR_FLAGS) == CAN_EFF_RTR_FLAGS) && |
383 | && !(*can_id & CAN_RTR_FLAG)) { | 379 | !(*can_id & CAN_RTR_FLAG)) { |
384 | 380 | ||
385 | if (*can_id & CAN_EFF_FLAG) { | 381 | if (*can_id & CAN_EFF_FLAG) { |
386 | if (*mask == (CAN_EFF_MASK | CAN_EFF_RTR_FLAGS)) { | 382 | if (*mask == (CAN_EFF_MASK | CAN_EFF_RTR_FLAGS)) { |
@@ -529,8 +525,8 @@ void can_rx_unregister(struct net_device *dev, canid_t can_id, canid_t mask, | |||
529 | */ | 525 | */ |
530 | 526 | ||
531 | hlist_for_each_entry_rcu(r, next, rl, list) { | 527 | hlist_for_each_entry_rcu(r, next, rl, list) { |
532 | if (r->can_id == can_id && r->mask == mask | 528 | if (r->can_id == can_id && r->mask == mask && |
533 | && r->func == func && r->data == data) | 529 | r->func == func && r->data == data) |
534 | break; | 530 | break; |
535 | } | 531 | } |
536 | 532 | ||
@@ -842,7 +838,7 @@ static struct packet_type can_packet __read_mostly = { | |||
842 | .func = can_rcv, | 838 | .func = can_rcv, |
843 | }; | 839 | }; |
844 | 840 | ||
845 | static struct net_proto_family can_family_ops __read_mostly = { | 841 | static const struct net_proto_family can_family_ops = { |
846 | .family = PF_CAN, | 842 | .family = PF_CAN, |
847 | .create = can_create, | 843 | .create = can_create, |
848 | .owner = THIS_MODULE, | 844 | .owner = THIS_MODULE, |