aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/em_meta.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sched/em_meta.c')
-rw-r--r--net/sched/em_meta.c14
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
319META_COLLECTOR(int_sk_refcnt) 321META_COLLECTOR(int_sk_refcnt)