From: Maria Matejka Date: Mon, 13 Jan 2025 21:15:52 +0000 (+0100) Subject: BGP: fix shutdown crash when dynamic peer is just connected X-Git-Tag: v3.0.2~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d13c9d378f257b499e9b7a633cffa8fa70a0bb68;p=thirdparty%2Fbird.git BGP: fix shutdown crash when dynamic peer is just connected In some edge cases, the dynamic BGP starts but doesn't yet pick up the socket from the peer, when it gets shut down, typically on a complete shutdown. Fixing this to just close the socket, not assert it being already picked up. --- diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 3170e3a42..859f7bc16 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -581,8 +581,10 @@ bgp_graceful_close_conn(struct bgp_conn *conn, int subcode, byte *data, uint len static void bgp_down(struct bgp_proto *p) { - /* Check that the dynamic BGP socket has been picked up */ - ASSERT_DIE(p->postponed_sk == NULL); + /* Close the possibly unpicked dynamic BGP socket */ + if (p->postponed_sk) + sk_close(p->postponed_sk); + p->postponed_sk = NULL; if (bgp_start_state(p) > BSS_PREPARE) {