git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net: cdc_mbim: __vlan_find_dev_deep need rcu_read_lock
[pandora-kernel.git]
/
drivers
/
net
/
usb
/
cdc_mbim.c
diff --git
a/drivers/net/usb/cdc_mbim.c
b/drivers/net/usb/cdc_mbim.c
index
c9f3281
..
13f7705
100644
(file)
--- a/
drivers/net/usb/cdc_mbim.c
+++ b/
drivers/net/usb/cdc_mbim.c
@@
-204,17
+204,23
@@
static void do_neigh_solicit(struct usbnet *dev, u8 *buf, u16 tci)
return;
/* need to send the NA on the VLAN dev, if any */
return;
/* need to send the NA on the VLAN dev, if any */
- if (tci)
+ rcu_read_lock();
+ if (tci) {
netdev = __vlan_find_dev_deep(dev->net, htons(ETH_P_8021Q),
tci);
netdev = __vlan_find_dev_deep(dev->net, htons(ETH_P_8021Q),
tci);
- else
+ if (!netdev) {
+ rcu_read_unlock();
+ return;
+ }
+ } else {
netdev = dev->net;
netdev = dev->net;
- if (!netdev)
- return;
+ }
+ dev_hold(netdev);
+ rcu_read_unlock();
in6_dev = in6_dev_get(netdev);
if (!in6_dev)
in6_dev = in6_dev_get(netdev);
if (!in6_dev)
-
return
;
+
goto out
;
is_router = !!in6_dev->cnf.forwarding;
in6_dev_put(in6_dev);
is_router = !!in6_dev->cnf.forwarding;
in6_dev_put(in6_dev);
@@
-224,6
+230,8
@@
static void do_neigh_solicit(struct usbnet *dev, u8 *buf, u16 tci)
true /* solicited */,
false /* override */,
true /* inc_opt */);
true /* solicited */,
false /* override */,
true /* inc_opt */);
+out:
+ dev_put(netdev);
}
static bool is_neigh_solicit(u8 *buf, size_t len)
}
static bool is_neigh_solicit(u8 *buf, size_t len)