lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 08 Aug 2018 10:40:35 +0300 From: Vlad Buslov <vladbu@...lanox.com> To: Jiri Pirko <jiri@...nulli.us> Cc: netdev@...r.kernel.org, davem@...emloft.net, jhs@...atatu.com, xiyou.wangcong@...il.com, pablo@...filter.org, kadlec@...ckhole.kfki.hu, fw@...len.de, ast@...nel.org, daniel@...earbox.net, edumazet@...gle.com, keescook@...omium.org, marcelo.leitner@...il.com Subject: Re: [PATCH net-next 12/14] net: sched: act_mirred: remove dependency on rtnl lock On Tue 07 Aug 2018 at 16:36, Jiri Pirko <jiri@...nulli.us> wrote: > Mon, Aug 06, 2018 at 08:54:23AM CEST, vladbu@...lanox.com wrote: > > [...] > >>diff --git a/include/net/tc_act/tc_tunnel_key.h b/include/net/tc_act/tc_tunnel_key.h >>index 46b8c7f1c8d5..e6e475d788c6 100644 >>--- a/include/net/tc_act/tc_tunnel_key.h >>+++ b/include/net/tc_act/tc_tunnel_key.h >>@@ -30,26 +30,47 @@ struct tcf_tunnel_key { >> >> static inline bool is_tcf_tunnel_set(const struct tc_action *a) >> { >>+ bool ret = false; >> #ifdef CONFIG_NET_CLS_ACT >> struct tcf_tunnel_key *t = to_tunnel_key(a); >>- struct tcf_tunnel_key_params *params = rtnl_dereference(t->params); >>+ struct tcf_tunnel_key_params *params; >> >>+ rcu_read_lock(); >>+ params = rcu_dereference(t->params); >> if (a->ops && a->ops->type == TCA_ACT_TUNNEL_KEY) >>- return params->tcft_action == TCA_TUNNEL_KEY_ACT_SET; >>+ ret = params->tcft_action == TCA_TUNNEL_KEY_ACT_SET; >>+ rcu_read_unlock(); >> #endif >>- return false; >>+ return ret; >> } >> >> static inline bool is_tcf_tunnel_release(const struct tc_action *a) > > Why are these tunnel things in a mirred patch? Mistake during re-slit. Will move those to tunnel_key patch. > > > [...] > > >> static struct net_device *tcf_mirred_get_dev(const struct tc_action *a) >> { >> struct tcf_mirred *m = to_mirred(a); >>+ struct net_device *dev; >>+ >>+ rcu_read_lock(); >>+ dev = rcu_dereference(m->tcfm_dev); >>+ if (dev) >>+ dev_hold(dev); >>+ rcu_read_unlock(); >> >>- return rtnl_dereference(m->tcfm_dev); >>+ return dev; >> } >> >> static int tcf_mirred_delete(struct net *net, u32 index) >>diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c >>index e8b0bbd0883f..0cce0eadc28b 100644 >>--- a/net/sched/cls_api.c >>+++ b/net/sched/cls_api.c >>@@ -2167,6 +2167,7 @@ static int tc_exts_setup_cb_egdev_call(struct tcf_exts *exts, >> if (!dev) >> continue; >> ret = tc_setup_cb_egdev_call(dev, type, type_data, err_stop); >>+ dev_put(dev); > > This looks really odd. a->ops->put_dev is needed. Got it. Will implement put_dev in v2. > > >> if (ret < 0) >> return ret; >> ok_count += ret; >>-- >>2.7.5 >> Thanks for reviewing my code!
Powered by blists - more mailing lists