From d13c9d378f257b499e9b7a633cffa8fa70a0bb68 Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Mon, 13 Jan 2025 22:15:52 +0100 Subject: [PATCH] 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. --- proto/bgp/bgp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 3170e3a4..859f7bc1 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) {