]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: evpn svd hash avoid double free 17996/head
authorChirag Shah <chirag@nvidia.com>
Fri, 31 Jan 2025 01:26:46 +0000 (17:26 -0800)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Tue, 4 Feb 2025 12:35:56 +0000 (12:35 +0000)
Upon zebra shutdown hash_clean_and_free is called
where user free function is passed,
The free function should not call hash_release
which lead to double free of hash bucket.

Fix:
The fix is to avoid calling hash_release from
free function if its called from hash_clean_and_free
path.

10 0x00007f0422b7df1f in free () from /lib/x86_64-linux-gnu/libc.so.6
11 0x00007f0422edd779 in qfree (mt=0x7f0423047ca0 <MTYPE_HASH_BUCKET>,
    ptr=0x55fc8bc81980) at ../lib/memory.c:130
12 0x00007f0422eb97e2 in hash_clean (hash=0x55fc8b979a60,
    free_func=0x55fc8a529478 <svd_nh_del_terminate>) at
    ../lib/hash.c:290
13 0x00007f0422eb98a1 in hash_clean_and_free (hash=0x55fc8a675920
    <svd_nh_table>, free_func=0x55fc8a529478 <svd_nh_del_terminate>) at
    ../lib/hash.c:305
14 0x000055fc8a5323a5 in zebra_vxlan_terminate () at
    ../zebra/zebra_vxlan.c:6099
15 0x000055fc8a4c9227 in zebra_router_terminate () at
    ../zebra/zebra_router.c:276
16 0x000055fc8a4413b3 in zebra_finalize (dummy=0x7fffb881c1d0) at
    ../zebra/main.c:269
17 0x00007f0422f44387 in event_call (thread=0x7fffb881c1d0) at
    ../lib/event.c:2011
18 0x00007f0422ecb6fa in frr_run (master=0x55fc8b733cb0) at
    ../lib/libfrr.c:1243
19 0x000055fc8a441987 in main (argc=14, argv=0x7fffb881c4a8) at
    ../zebra/main.c:584

Signed-off-by: Chirag Shah <chirag@nvidia.com>
(cherry picked from commit 1d4f5b9b19588d77d3eaf06440c26a8c974831a3)

zebra/zebra_vxlan.c

index 0b75ec261e3f4abd838927226f7b02a46875fc48..cc46b85bd2ec8072d5f6f9e23bcc3e9b8b7c4852 100644 (file)
@@ -1604,7 +1604,7 @@ static void svd_nh_del_terminate(void *ptr)
        struct zebra_neigh *n = ptr;
 
        n->refcnt = 0;
-       svd_nh_del(n);
+       XFREE(MTYPE_L3NEIGH, n);
 }