From abf1886c9ed12d708a1409b93a4d646884e2c105 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Tue, 22 Feb 2022 13:07:16 +0100 Subject: [PATCH] ISIS crash fixed Crash if ISIS PDU was received but not configured. --- src/isis/isis_csnp.c | 7 +++++-- src/isis/isis_lsp.c | 7 +++++-- src/isis/isis_p2p_hello.c | 7 +++++-- src/isis/isis_psnp.c | 7 +++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/isis/isis_csnp.c b/src/isis/isis_csnp.c index 41280418..b65b80e6 100644 --- a/src/isis/isis_csnp.c +++ b/src/isis/isis_csnp.c @@ -167,8 +167,8 @@ void isis_csnp_handler_rx(bbl_interface_s *interface, isis_pdu_t *pdu, uint8_t level) { isis_adjacency_t *adjacency = interface->isis_adjacency[level-1]; - isis_instance_t *instance = adjacency->instance; - isis_config_t *config = instance->config; + isis_instance_t *instance = NULL; + isis_config_t *config = NULL; uint64_t csnp_scan = ++g_csnp_scan; @@ -186,6 +186,9 @@ isis_csnp_handler_rx(bbl_interface_s *interface, isis_pdu_t *pdu, uint8_t level) if(!adjacency) { return; } + instance = adjacency->instance; + config = instance->config; + adjacency->stats.csnp_rx++; lsp_start = be64toh(*(uint64_t*)PDU_OFFSET(pdu, ISIS_OFFSET_CSNP_LSP_START)); diff --git a/src/isis/isis_lsp.c b/src/isis/isis_lsp.c index b9b4bbd8..2ef85c46 100644 --- a/src/isis/isis_lsp.c +++ b/src/isis/isis_lsp.c @@ -452,8 +452,8 @@ void isis_lsp_handler_rx(bbl_interface_s *interface, isis_pdu_t *pdu, uint8_t level) { isis_adjacency_t *adjacency = interface->isis_adjacency[level-1]; - isis_instance_t *instance = adjacency->instance; - isis_config_t *config = instance->config; + isis_instance_t *instance = NULL; + isis_config_t *config = NULL; isis_lsp_t *lsp = NULL; uint64_t lsp_id; @@ -469,6 +469,9 @@ isis_lsp_handler_rx(bbl_interface_s *interface, isis_pdu_t *pdu, uint8_t level) if(!adjacency) { return; } + instance = adjacency->instance; + config = instance->config; + adjacency->stats.lsp_rx++; lsp_id = be64toh(*(uint64_t*)PDU_OFFSET(pdu, ISIS_OFFSET_LSP_ID)); diff --git a/src/isis/isis_p2p_hello.c b/src/isis/isis_p2p_hello.c index af734172..f4756d5f 100644 --- a/src/isis/isis_p2p_hello.c +++ b/src/isis/isis_p2p_hello.c @@ -113,8 +113,8 @@ void isis_p2p_hello_handler_rx(bbl_interface_s *interface, isis_pdu_t *pdu) { isis_adjacency_p2p_t *adjacency = interface->isis_adjacency_p2p; - isis_instance_t *instance = adjacency->instance; - isis_config_t *config = instance->config; + isis_instance_t *instance = NULL; + isis_config_t *config = NULL; isis_peer_t *peer; isis_tlv_t *tlv; @@ -128,6 +128,9 @@ isis_p2p_hello_handler_rx(bbl_interface_s *interface, isis_pdu_t *pdu) { if(!adjacency) { return; } + instance = adjacency->instance; + config = instance->config; + adjacency->stats.hello_rx++; if(config->level1_auth && config->level1_key) { diff --git a/src/isis/isis_psnp.c b/src/isis/isis_psnp.c index 0400a5a4..ad1dfc2d 100644 --- a/src/isis/isis_psnp.c +++ b/src/isis/isis_psnp.c @@ -146,8 +146,8 @@ void isis_psnp_handler_rx(bbl_interface_s *interface, isis_pdu_t *pdu, uint8_t level) { isis_adjacency_t *adjacency = interface->isis_adjacency[level-1]; - isis_instance_t *instance = adjacency->instance; - isis_config_t *config = instance->config; + isis_instance_t *instance = NULL; + isis_config_t *config = NULL; hb_tree *lsdb; @@ -157,6 +157,9 @@ isis_psnp_handler_rx(bbl_interface_s *interface, isis_pdu_t *pdu, uint8_t level) if(!adjacency) { return; } + instance = adjacency->instance; + config = instance->config; + adjacency->stats.psnp_rx++; if(level == ISIS_LEVEL_1 && config->level1_auth && config->level1_key) {