diff options
Diffstat (limited to 'net/sched/em_meta.c')
-rw-r--r-- | net/sched/em_meta.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c index 18d85d259104..3bcac8aa333c 100644 --- a/net/sched/em_meta.c +++ b/net/sched/em_meta.c | |||
@@ -58,6 +58,7 @@ | |||
58 | * only available if that subsystem is enabled in the kernel. | 58 | * only available if that subsystem is enabled in the kernel. |
59 | */ | 59 | */ |
60 | 60 | ||
61 | #include <linux/slab.h> | ||
61 | #include <linux/module.h> | 62 | #include <linux/module.h> |
62 | #include <linux/types.h> | 63 | #include <linux/types.h> |
63 | #include <linux/kernel.h> | 64 | #include <linux/kernel.h> |
@@ -303,17 +304,18 @@ META_COLLECTOR(var_sk_bound_if) | |||
303 | { | 304 | { |
304 | SKIP_NONLOCAL(skb); | 305 | SKIP_NONLOCAL(skb); |
305 | 306 | ||
306 | if (skb->sk->sk_bound_dev_if == 0) { | 307 | if (skb->sk->sk_bound_dev_if == 0) { |
307 | dst->value = (unsigned long) "any"; | 308 | dst->value = (unsigned long) "any"; |
308 | dst->len = 3; | 309 | dst->len = 3; |
309 | } else { | 310 | } else { |
310 | struct net_device *dev; | 311 | struct net_device *dev; |
311 | 312 | ||
312 | dev = dev_get_by_index(&init_net, skb->sk->sk_bound_dev_if); | 313 | rcu_read_lock(); |
314 | dev = dev_get_by_index_rcu(sock_net(skb->sk), | ||
315 | skb->sk->sk_bound_dev_if); | ||
313 | *err = var_dev(dev, dst); | 316 | *err = var_dev(dev, dst); |
314 | if (dev) | 317 | rcu_read_unlock(); |
315 | dev_put(dev); | 318 | } |
316 | } | ||
317 | } | 319 | } |
318 | 320 | ||
319 | META_COLLECTOR(int_sk_refcnt) | 321 | META_COLLECTOR(int_sk_refcnt) |