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