From: Greg Kroah-Hartman Date: Mon, 10 Mar 2025 17:00:42 +0000 (+0100) Subject: 5.15-stable patches X-Git-Tag: v5.4.291~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d96ca9a7b5fdecbd48ea88612c475189d617434a;p=thirdparty%2Fkernel%2Fstable-queue.git 5.15-stable patches added patches: net-ipv6-fix-dst-refleaks-in-rpl-seg6-and-ioam6-lwtunnels.patch --- diff --git a/queue-5.15/net-ipv6-fix-dst-refleaks-in-rpl-seg6-and-ioam6-lwtunnels.patch b/queue-5.15/net-ipv6-fix-dst-refleaks-in-rpl-seg6-and-ioam6-lwtunnels.patch new file mode 100644 index 0000000000..f6dc322f5a --- /dev/null +++ b/queue-5.15/net-ipv6-fix-dst-refleaks-in-rpl-seg6-and-ioam6-lwtunnels.patch @@ -0,0 +1,87 @@ +From c71a192976ded2f2f416d03c4f595cdd4478b825 Mon Sep 17 00:00:00 2001 +From: Jakub Kicinski +Date: Wed, 29 Jan 2025 19:15:18 -0800 +Subject: net: ipv6: fix dst refleaks in rpl, seg6 and ioam6 lwtunnels + +From: Jakub Kicinski + +commit c71a192976ded2f2f416d03c4f595cdd4478b825 upstream. + +dst_cache_get() gives us a reference, we need to release it. + +Discovered by the ioam6.sh test, kmemleak was recently fixed +to catch per-cpu memory leaks. + +Fixes: 985ec6f5e623 ("net: ipv6: rpl_iptunnel: mitigate 2-realloc issue") +Fixes: 40475b63761a ("net: ipv6: seg6_iptunnel: mitigate 2-realloc issue") +Fixes: dce525185bc9 ("net: ipv6: ioam6_iptunnel: mitigate 2-realloc issue") +Reviewed-by: Justin Iurman +Reviewed-by: Simon Horman +Link: https://patch.msgid.link/20250130031519.2716843-1-kuba@kernel.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + net/ipv6/rpl_iptunnel.c | 6 ++++-- + net/ipv6/seg6_iptunnel.c | 6 ++++-- + 2 files changed, 8 insertions(+), 4 deletions(-) + +--- a/net/ipv6/rpl_iptunnel.c ++++ b/net/ipv6/rpl_iptunnel.c +@@ -232,7 +232,6 @@ static int rpl_output(struct net *net, s + dst = ip6_route_output(net, NULL, &fl6); + if (dst->error) { + err = dst->error; +- dst_release(dst); + goto drop; + } + +@@ -251,6 +250,7 @@ static int rpl_output(struct net *net, s + return dst_output(net, sk, skb); + + drop: ++ dst_release(dst); + kfree_skb(skb); + return err; + } +@@ -277,8 +277,10 @@ static int rpl_input(struct sk_buff *skb + local_bh_enable(); + + err = rpl_do_srh(skb, rlwt, dst); +- if (unlikely(err)) ++ if (unlikely(err)) { ++ dst_release(dst); + goto drop; ++ } + + skb_dst_drop(skb); + +--- a/net/ipv6/seg6_iptunnel.c ++++ b/net/ipv6/seg6_iptunnel.c +@@ -490,8 +490,10 @@ static int seg6_input_core(struct net *n + local_bh_enable(); + + err = seg6_do_srh(skb, dst); +- if (unlikely(err)) ++ if (unlikely(err)) { ++ dst_release(dst); + goto drop; ++ } + + skb_dst_drop(skb); + +@@ -582,7 +584,6 @@ static int seg6_output_core(struct net * + dst = ip6_route_output(net, NULL, &fl6); + if (dst->error) { + err = dst->error; +- dst_release(dst); + goto drop; + } + +@@ -604,6 +605,7 @@ static int seg6_output_core(struct net * + + return dst_output(net, sk, skb); + drop: ++ dst_release(dst); + kfree_skb(skb); + return err; + }