]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: fix crash if macvlan link in another netns
authorLouis Scalbert <louis.scalbert@6wind.com>
Tue, 20 Feb 2024 16:49:01 +0000 (17:49 +0100)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Tue, 27 Feb 2024 16:33:35 +0000 (16:33 +0000)
A macvlan interface can have its underlying link-interface in another
namespace (aka. netns). However, by default, zebra does not know the
interface from the other namespaces. It results in a crash the pointer
to the link interface is NULL.

> 6  0x0000559d77a329d3 in zebra_vxlan_macvlan_up (ifp=0x559d798b8e00) at /root/frr/zebra/zebra_vxlan.c:4676
> 4676 link_zif = link_ifp->info;
> (gdb) list
> 4671 struct interface *link_ifp, *link_if;
> 4672
> 4673 zif = ifp->info;
> 4674 assert(zif);
> 4675 link_ifp = zif->link;
> 4676 link_zif = link_ifp->info;
> 4677 assert(link_zif);
> 4678
> (gdb) p zif->link
> $2 = (struct interface *) 0x0
> (gdb) p zif->link_ifindex
> $3 = 15

Fix the crash by returning when the macvlan link-interface is in another
namespace. No need to go further because any vxlan under the macvlan
interface would not be accessible by zebra.

Link: https://github.com/FRRouting/frr/issues/15370
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
(cherry picked from commit 44e6e3868d7a1488447f2be446dbd7cb5a5559ce)

zebra/zebra_vxlan.c

index c6ff5089ca9e50dabdf34187b32665d056e0b858..c882179e05b9bb96b7b11820b3344732591d9972 100644 (file)
@@ -4782,6 +4782,11 @@ void zebra_vxlan_macvlan_up(struct interface *ifp)
 
        zif = ifp->info;
        assert(zif);
+
+       if (zif->link_nsid)
+               /* the link interface is another namespace */
+               return;
+
        link_ifp = zif->link;
        link_zif = link_ifp->info;
        assert(link_zif);