|
Jiri Slaby |
7a187a |
From: Davide Caratti <dcaratti@redhat.com>
|
|
Jiri Slaby |
7a187a |
Date: Fri, 20 Jan 2023 18:01:39 +0100
|
|
Jiri Slaby |
7a187a |
Subject: [PATCH] net/sched: act_mirred: better wording on protection against
|
|
Jiri Slaby |
7a187a |
excessive stack growth
|
|
Jiri Slaby |
7a187a |
References: bsc#1012628
|
|
Jiri Slaby |
7a187a |
Patch-mainline: 6.2.9
|
|
Jiri Slaby |
7a187a |
Git-commit: 78dcdffe0418ac8f3f057f26fe71ccf4d8ed851f
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
[ Upstream commit 78dcdffe0418ac8f3f057f26fe71ccf4d8ed851f ]
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
with commit e2ca070f89ec ("net: sched: protect against stack overflow in
|
|
Jiri Slaby |
7a187a |
TC act_mirred"), act_mirred protected itself against excessive stack growth
|
|
Jiri Slaby |
7a187a |
using per_cpu counter of nested calls to tcf_mirred_act(), and capping it
|
|
Jiri Slaby |
7a187a |
to MIRRED_RECURSION_LIMIT. However, such protection does not detect
|
|
Jiri Slaby |
7a187a |
recursion/loops in case the packet is enqueued to the backlog (for example,
|
|
Jiri Slaby |
7a187a |
when the mirred target device has RPS or skb timestamping enabled). Change
|
|
Jiri Slaby |
7a187a |
the wording from "recursion" to "nesting" to make it more clear to readers.
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
CC: Jamal Hadi Salim <jhs@mojatatu.com>
|
|
Jiri Slaby |
7a187a |
Signed-off-by: Davide Caratti <dcaratti@redhat.com>
|
|
Jiri Slaby |
7a187a |
Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
|
|
Jiri Slaby |
7a187a |
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
|
|
Jiri Slaby |
7a187a |
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
Jiri Slaby |
7a187a |
Stable-dep-of: ca22da2fbd69 ("act_mirred: use the backlog for nested calls to mirred ingress")
|
|
Jiri Slaby |
7a187a |
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
Jiri Slaby |
7a187a |
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
|
Jiri Slaby |
7a187a |
---
|
|
Jiri Slaby |
7a187a |
net/sched/act_mirred.c | 16 ++++++++--------
|
|
Jiri Slaby |
7a187a |
1 file changed, 8 insertions(+), 8 deletions(-)
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
|
|
Jiri Slaby |
7a187a |
index 7284bcea..c8abb513 100644
|
|
Jiri Slaby |
7a187a |
--- a/net/sched/act_mirred.c
|
|
Jiri Slaby |
7a187a |
+++ b/net/sched/act_mirred.c
|
|
Jiri Slaby |
7a187a |
@@ -29,8 +29,8 @@
|
|
Jiri Slaby |
7a187a |
static LIST_HEAD(mirred_list);
|
|
Jiri Slaby |
7a187a |
static DEFINE_SPINLOCK(mirred_list_lock);
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
-#define MIRRED_RECURSION_LIMIT 4
|
|
Jiri Slaby |
7a187a |
-static DEFINE_PER_CPU(unsigned int, mirred_rec_level);
|
|
Jiri Slaby |
7a187a |
+#define MIRRED_NEST_LIMIT 4
|
|
Jiri Slaby |
7a187a |
+static DEFINE_PER_CPU(unsigned int, mirred_nest_level);
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
static bool tcf_mirred_is_act_redirect(int action)
|
|
Jiri Slaby |
7a187a |
{
|
|
Jiri Slaby |
7a187a |
@@ -226,7 +226,7 @@ TC_INDIRECT_SCOPE int tcf_mirred_act(struct sk_buff *skb,
|
|
Jiri Slaby |
7a187a |
struct sk_buff *skb2 = skb;
|
|
Jiri Slaby |
7a187a |
bool m_mac_header_xmit;
|
|
Jiri Slaby |
7a187a |
struct net_device *dev;
|
|
Jiri Slaby |
7a187a |
- unsigned int rec_level;
|
|
Jiri Slaby |
7a187a |
+ unsigned int nest_level;
|
|
Jiri Slaby |
7a187a |
int retval, err = 0;
|
|
Jiri Slaby |
7a187a |
bool use_reinsert;
|
|
Jiri Slaby |
7a187a |
bool want_ingress;
|
|
Jiri Slaby |
7a187a |
@@ -237,11 +237,11 @@ TC_INDIRECT_SCOPE int tcf_mirred_act(struct sk_buff *skb,
|
|
Jiri Slaby |
7a187a |
int mac_len;
|
|
Jiri Slaby |
7a187a |
bool at_nh;
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
- rec_level = __this_cpu_inc_return(mirred_rec_level);
|
|
Jiri Slaby |
7a187a |
- if (unlikely(rec_level > MIRRED_RECURSION_LIMIT)) {
|
|
Jiri Slaby |
7a187a |
+ nest_level = __this_cpu_inc_return(mirred_nest_level);
|
|
Jiri Slaby |
7a187a |
+ if (unlikely(nest_level > MIRRED_NEST_LIMIT)) {
|
|
Jiri Slaby |
7a187a |
net_warn_ratelimited("Packet exceeded mirred recursion limit on dev %s\n",
|
|
Jiri Slaby |
7a187a |
netdev_name(skb->dev));
|
|
Jiri Slaby |
7a187a |
- __this_cpu_dec(mirred_rec_level);
|
|
Jiri Slaby |
7a187a |
+ __this_cpu_dec(mirred_nest_level);
|
|
Jiri Slaby |
7a187a |
return TC_ACT_SHOT;
|
|
Jiri Slaby |
7a187a |
}
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
@@ -310,7 +310,7 @@ TC_INDIRECT_SCOPE int tcf_mirred_act(struct sk_buff *skb,
|
|
Jiri Slaby |
7a187a |
err = tcf_mirred_forward(want_ingress, skb);
|
|
Jiri Slaby |
7a187a |
if (err)
|
|
Jiri Slaby |
7a187a |
tcf_action_inc_overlimit_qstats(&m->common);
|
|
Jiri Slaby |
7a187a |
- __this_cpu_dec(mirred_rec_level);
|
|
Jiri Slaby |
7a187a |
+ __this_cpu_dec(mirred_nest_level);
|
|
Jiri Slaby |
7a187a |
return TC_ACT_CONSUMED;
|
|
Jiri Slaby |
7a187a |
}
|
|
Jiri Slaby |
7a187a |
}
|
|
Jiri Slaby |
7a187a |
@@ -322,7 +322,7 @@ TC_INDIRECT_SCOPE int tcf_mirred_act(struct sk_buff *skb,
|
|
Jiri Slaby |
7a187a |
if (tcf_mirred_is_act_redirect(m_eaction))
|
|
Jiri Slaby |
7a187a |
retval = TC_ACT_SHOT;
|
|
Jiri Slaby |
7a187a |
}
|
|
Jiri Slaby |
7a187a |
- __this_cpu_dec(mirred_rec_level);
|
|
Jiri Slaby |
7a187a |
+ __this_cpu_dec(mirred_nest_level);
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
return retval;
|
|
Jiri Slaby |
7a187a |
}
|
|
Jiri Slaby |
7a187a |
--
|
|
Jiri Slaby |
7a187a |
2.35.3
|
|
Jiri Slaby |
7a187a |
|