]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: ipv6: fix dst ref loop in ila lwtunnel
authorJustin Iurman <justin.iurman@uliege.be>
Tue, 4 Mar 2025 18:10:39 +0000 (19:10 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Mar 2025 11:47:40 +0000 (12:47 +0100)
[ Upstream commit 0e7633d7b95b67f1758aea19f8e85621c5f506a3 ]

This patch follows commit 92191dd10730 ("net: ipv6: fix dst ref loops in
rpl, seg6 and ioam6 lwtunnels") and, on a second thought, the same patch
is also needed for ila (even though the config that triggered the issue
was pathological, but still, we don't want that to happen).

Fixes: 79ff2fc31e0f ("ila: Cache a route to translated address")
Cc: Tom Herbert <tom@herbertland.com>
Signed-off-by: Justin Iurman <justin.iurman@uliege.be>
Link: https://patch.msgid.link/20250304181039.35951-1-justin.iurman@uliege.be
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/ipv6/ila/ila_lwt.c

index 9d37f7164e732ea6c1f69b366c4c71416b07e69d..6d37dda3d26fc678640bb087762fe9d0c893b6f7 100644 (file)
@@ -88,7 +88,8 @@ static int ila_output(struct net *net, struct sock *sk, struct sk_buff *skb)
                        goto drop;
                }
 
-               if (ilwt->connected) {
+               /* cache only if we don't create a dst reference loop */
+               if (ilwt->connected && orig_dst->lwtstate != dst->lwtstate) {
                        local_bh_disable();
                        dst_cache_set_ip6(&ilwt->dst_cache, dst, &fl6.saddr);
                        local_bh_enable();