You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When changing the peers sockunion structure the bgp->peer
list was not being updated properly. Since the peer's su
is being used for a sorted insert then the change of it requires
that the value be pulled out of the bgp->peer list and then
put back into as well.
Additionally ensure that the hash is always released on peer
deletion.
Lead to this from this decode in a address sanitizer run.
=================================================================
==30778==ERROR: AddressSanitizer: heap-use-after-free on address 0x62a0000d8440 at pc 0x7f48c9c5c547 bp 0x7ffcba272cb0 sp 0x7ffcba272ca8
READ of size 2 at 0x62a0000d8440 thread T0
#0 0x7f48c9c5c546 in sockunion_same lib/sockunion.c:425
sonic-net#1 0x55cfefe3000f in peer_hash_same bgpd/bgpd.c:890
sonic-net#2 0x7f48c9bde039 in hash_release lib/hash.c:209
sonic-net#3 0x55cfefe3373f in bgp_peer_conf_if_to_su_update bgpd/bgpd.c:1541
sonic-net#4 0x55cfefd0be7a in bgp_stop bgpd/bgp_fsm.c:1631
sonic-net#5 0x55cfefe4028f in peer_delete bgpd/bgpd.c:2362
sonic-net#6 0x55cfefdd5e97 in no_neighbor_interface_config bgpd/bgp_vty.c:4267
sonic-net#7 0x7f48c9b9d160 in cmd_execute_command_real lib/command.c:949
sonic-net#8 0x7f48c9ba1112 in cmd_execute_command lib/command.c:1009
sonic-net#9 0x7f48c9ba1573 in cmd_execute lib/command.c:1162
sonic-net#10 0x7f48c9c87402 in vty_command lib/vty.c:526
sonic-net#11 0x7f48c9c87832 in vty_execute lib/vty.c:1291
sonic-net#12 0x7f48c9c8e741 in vtysh_read lib/vty.c:2130
sonic-net#13 0x7f48c9c7a66d in thread_call lib/thread.c:1585
sonic-net#14 0x7f48c9bf64e7 in frr_run lib/libfrr.c:1123
sonic-net#15 0x55cfefc75a15 in main bgpd/bgp_main.c:540
sonic-net#16 0x7f48c96b009a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2409a)
sonic-net#17 0x55cfefc787f9 in _start (/usr/lib/frr/bgpd+0xe27f9)
0x62a0000d8440 is located 576 bytes inside of 23376-byte region [0x62a0000d8200,0x62a0000ddd50)
freed by thread T0 here:
#0 0x7f48c9eb9fb0 in __interceptor_free (/lib/x86_64-linux-gnu/libasan.so.5+0xe8fb0)
sonic-net#1 0x55cfefe3fe42 in peer_free bgpd/bgpd.c:1113
sonic-net#2 0x55cfefe3fe42 in peer_unlock_with_caller bgpd/bgpd.c:1144
sonic-net#3 0x55cfefe4092e in peer_delete bgpd/bgpd.c:2457
sonic-net#4 0x55cfefdd5e97 in no_neighbor_interface_config bgpd/bgp_vty.c:4267
sonic-net#5 0x7f48c9b9d160 in cmd_execute_command_real lib/command.c:949
sonic-net#6 0x7f48c9ba1112 in cmd_execute_command lib/command.c:1009
sonic-net#7 0x7f48c9ba1573 in cmd_execute lib/command.c:1162
sonic-net#8 0x7f48c9c87402 in vty_command lib/vty.c:526
sonic-net#9 0x7f48c9c87832 in vty_execute lib/vty.c:1291
sonic-net#10 0x7f48c9c8e741 in vtysh_read lib/vty.c:2130
sonic-net#11 0x7f48c9c7a66d in thread_call lib/thread.c:1585
sonic-net#12 0x7f48c9bf64e7 in frr_run lib/libfrr.c:1123
sonic-net#13 0x55cfefc75a15 in main bgpd/bgp_main.c:540
sonic-net#14 0x7f48c96b009a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2409a)
Signed-off-by: Donald Sharp <[email protected]>
0 commit comments