]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Fix crash during reconnect
authorIgor Zhukov <fsb4000@yandex.ru>
Fri, 4 Oct 2024 06:16:02 +0000 (13:16 +0700)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Fri, 4 Oct 2024 11:41:59 +0000 (11:41 +0000)
fpm_enqueue_rmac_table expects an fpm_rmac_arg* as its argument.

The issue can be reproduced by dropping the TCP session using:

ss -K dst 127.0.0.1 dport = 2620

I used Fedora 40 and frr 9.1.2 and I got the gdb backtrace:

(gdb) bt
0  0x00007fdd7d6997ea in fpm_enqueue_rmac_table (bucket=0x2134dd0, arg=0x2132b60) at zebra/dplane_fpm_nl.c:1217
1  0x00007fdd7dd1560d in hash_iterate (hash=0x21335f0, func=0x7fdd7d6997a0 <fpm_enqueue_rmac_table>, arg=0x2132b60) at lib/hash.c:252
2  0x00007fdd7dd1560d in hash_iterate (hash=0x1e5bf10, func=func@entry=0x7fdd7d698900 <fpm_enqueue_l3vni_table>,
    arg=arg@entry=0x7ffed983bef0) at lib/hash.c:252
3  0x00007fdd7d698b5c in fpm_rmac_send (t=<optimized out>) at zebra/dplane_fpm_nl.c:1262
4  0x00007fdd7dd6ce22 in event_call (thread=thread@entry=0x7ffed983c010) at lib/event.c:1970
5  0x00007fdd7dd20758 in frr_run (master=0x1d27f10) at lib/libfrr.c:1213
6  0x0000000000425588 in main (argc=10, argv=0x7ffed983c2e8) at zebra/main.c:492

Signed-off-by: Igor Zhukov <fsb4000@yandex.ru>
(cherry picked from commit a3877e4444dc3a1253135d3b9479935fc9a966f8)

zebra/dplane_fpm_nl.c

index 9ad92d6269dd873fcdca6b39b1e7f955d7c8fc41..5d3471d28083dad4f1562b63f5d2d93c8dd9ca22 100644 (file)
@@ -1330,7 +1330,7 @@ static void fpm_enqueue_l3vni_table(struct hash_bucket *bucket, void *arg)
        struct zebra_l3vni *zl3vni = bucket->data;
 
        fra->zl3vni = zl3vni;
-       hash_iterate(zl3vni->rmac_table, fpm_enqueue_rmac_table, zl3vni);
+       hash_iterate(zl3vni->rmac_table, fpm_enqueue_rmac_table, fra);
 }
 
 static void fpm_rmac_send(struct event *t)