From 392186a6e8cdbb8fc455b0aa4de69acf24d34e4f Mon Sep 17 00:00:00 2001 From: Igor Ryzhov Date: Mon, 18 Oct 2021 17:16:35 +0300 Subject: [PATCH] ospfd: fix crash when creating vlink in unknown vrf if_create_name crashes when vrf_id is VRF_UNKNOWN: ``` nfware# conf t nfware(config)# router ospf vrf doesnt-exist nfware(config-router)# area 1.1.1.1 virtual-link 2.2.2.2 vtysh: error reading from ospfd: Success (0)Warning: closing connection to ospfd because of an I/O error! ``` Signed-off-by: Igor Ryzhov (cherry picked from commit 9f4ffd809a24b55da45198e07e7232679dd75a8c) --- ospfd/ospf_interface.c | 7 +++++++ ospfd/ospf_vty.c | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c index b3aba247df..1c1c38a879 100644 --- a/ospfd/ospf_interface.c +++ b/ospfd/ospf_interface.c @@ -909,6 +909,13 @@ struct ospf_interface *ospf_vl_new(struct ospf *ospf, return NULL; } + if (ospf->vrf_id == VRF_UNKNOWN) { + if (IS_DEBUG_OSPF_EVENT) + zlog_debug( + "ospf_vl_new(): Alarm: cannot create pseudo interface in unknown VRF"); + return NULL; + } + if (IS_DEBUG_OSPF_EVENT) zlog_debug( "ospf_vl_new(): creating pseudo zebra interface vrf id %u", diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 881355a84b..a796c6547a 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -892,6 +892,12 @@ ospf_find_vl_data(struct ospf *ospf, struct ospf_vl_config_data *vl_config) vl_data = ospf_vl_data_new(area, vl_config->vl_peer); if (vl_data->vl_oi == NULL) { vl_data->vl_oi = ospf_vl_new(ospf, vl_data); + if (!vl_data->vl_oi) { + ospf_vl_data_free(vl_data); + vty_out(vty, + "Can't create VL, check logs for more information\n"); + return NULL; + } ospf_vl_add(ospf, vl_data); ospf_spf_calculate_schedule(ospf, SPF_FLAG_CONFIG_CHANGE); -- 2.39.5