From 8d6b2f6d7a8cd78ae42262c4de112f8301e80e18 Mon Sep 17 00:00:00 2001 From: Artem Glazychev Date: Wed, 18 Dec 2024 15:50:13 +0700 Subject: linux-cp: fix segfault while receiving nl messages - check nl socket before receiving messages - we don't need extra callback after adding an lcp pair because we start draining messages (due to epoll) right after opening socket Type: fix Change-Id: I0ecb03b758f066662015fd6c6b9d3c48cb520c0d Signed-off-by: Artem Glazychev --- src/plugins/linux-cp/lcp_nl.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/plugins/linux-cp/lcp_nl.c b/src/plugins/linux-cp/lcp_nl.c index 85b6447007a..71104d39134 100644 --- a/src/plugins/linux-cp/lcp_nl.c +++ b/src/plugins/linux-cp/lcp_nl.c @@ -732,7 +732,8 @@ lcp_nl_drain_messages (void) nl_main_t *nm = &nl_main; /* Read until there's an error */ - while ((err = nl_recvmsgs_default (nm->sk_route)) > -1) + while ((err = nm->sk_route ? nl_recvmsgs_default (nm->sk_route) : + -NLE_BAD_SOCK) > -1) ; /* If there was an error other then EAGAIN, signal process node */ @@ -752,12 +753,6 @@ lcp_nl_drain_messages (void) return err; } -void -lcp_nl_pair_add_cb (lcp_itf_pair_t *pair) -{ - lcp_nl_drain_messages (); -} - static clib_error_t * nl_route_read_cb (clib_file_t *f) { @@ -1008,16 +1003,12 @@ clib_error_t * lcp_nl_init (vlib_main_t *vm) { nl_main_t *nm = &nl_main; - lcp_itf_pair_vft_t nl_itf_pair_vft = { - .pair_add_fn = lcp_nl_pair_add_cb, - }; nm->nl_status = NL_STATUS_NOTIF_PROC; nm->clib_file_index = ~0; nm->nl_logger = vlib_log_register_class ("nl", "nl"); lcp_nl_open_socket (); - lcp_itf_pair_register_vft (&nl_itf_pair_vft); return (NULL); } -- cgit