]> git.proxmox.com Git - mirror_frr.git/commitdiff
ospfd: Coverity corrections
authorOlivier Dugeon <olivier.dugeon@orange.com>
Wed, 26 Aug 2020 15:27:16 +0000 (17:27 +0200)
committerOlivier Dugeon <olivier.dugeon@orange.com>
Wed, 26 Aug 2020 15:27:16 +0000 (17:27 +0200)
Following PR #6726, Coverity Scan detected some new errors in the OSPF Segment
Routing code. This patch corrects them.

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
ospfd/ospf_ext.c
ospfd/ospf_ri.c
ospfd/ospf_sr.c

index bc952e4ef9951670ab782eeacb416db10ae38b42..90dc108c0ed7c8b373d9165127ac128147e434c0 100644 (file)
@@ -563,9 +563,9 @@ static void ospf_ext_link_update_adj_sid(struct ext_itf *exti)
                set_adj_sid(exti, true, bck_label, SID_LABEL);
                set_adj_sid(exti, false, label, SID_LABEL);
        } else {
-                set_lan_adj_sid(exti, true, bck_label, SID_LABEL,
+               set_lan_adj_sid(exti, true, bck_label, SID_LABEL,
                                exti->lan_sid[0].neighbor_id);
-                set_lan_adj_sid(exti, false, label, SID_LABEL,
+               set_lan_adj_sid(exti, false, label, SID_LABEL,
                                exti->lan_sid[1].neighbor_id);
        }
 
@@ -590,8 +590,8 @@ static void ospf_ext_link_delete_adj_sid(struct ext_itf *exti)
                ospf_sr_local_block_release_label(exti->adj_sid[0].value);
                ospf_sr_local_block_release_label(exti->adj_sid[1].value);
        } else {
-               ospf_sr_local_block_release_label(exti->adj_sid[0].value);
-               ospf_sr_local_block_release_label(exti->adj_sid[1].value);
+               ospf_sr_local_block_release_label(exti->lan_sid[0].value);
+               ospf_sr_local_block_release_label(exti->lan_sid[1].value);
        }
        /* And reset corresponding TLV */
        unset_adjacency_sid(exti);
index 8eeaf7be3c59f1bb832c6babf99f11247cf4e828..fc9c8f6be68929387d2aed30580ed035aedb79e2 100644 (file)
@@ -573,20 +573,23 @@ static void initialize_params(struct ospf_router_info *ori)
        return;
 }
 
-static int is_mandated_params_set(struct ospf_router_info ori)
+static int is_mandated_params_set(struct ospf_router_info *ori)
 {
        int rc = 0;
 
-       if (ntohs(ori.router_cap.header.type) == 0)
+       if (ori == NULL)
                return rc;
 
-       if ((ntohs(ori.pce_info.pce_header.header.type) == RI_TLV_PCE)
-           && (ntohs(ori.pce_info.pce_address.header.type) == 0)
-           && (ntohs(ori.pce_info.pce_cap_flag.header.type) == 0))
+       if (ntohs(ori->router_cap.header.type) == 0)
                return rc;
 
-       if ((ori.sr_info.enabled) && (ntohs(TLV_TYPE(ori.sr_info.algo)) == 0)
-           && (ntohs(TLV_TYPE(ori.sr_info.srgb)) == 0))
+       if ((ntohs(ori->pce_info.pce_header.header.type) == RI_TLV_PCE)
+           && (ntohs(ori->pce_info.pce_address.header.type) == 0)
+           && (ntohs(ori->pce_info.pce_cap_flag.header.type) == 0))
+               return rc;
+
+       if ((ori->sr_info.enabled) && (ntohs(TLV_TYPE(ori->sr_info.algo)) == 0)
+           && (ntohs(TLV_TYPE(ori->sr_info.srgb)) == 0))
                return rc;
 
        rc = 1;
@@ -626,6 +629,10 @@ void ospf_router_info_update_sr(bool enable, struct sr_node *srn)
                initialize_params(&OspfRI);
        }
 
+       /* Check that SR node is valid */
+       if (srn == NULL)
+               return;
+
        if (IS_DEBUG_OSPF_SR)
                zlog_debug("RI (%s): %s Routing Information for Segment Routing",
                           __func__, enable ? "Enable" : "Disable");
@@ -986,7 +993,7 @@ static int ospf_router_info_lsa_originate(void *arg)
        }
 
        /* Router Information is not yet Engaged, check parameters */
-       if (!is_mandated_params_set(OspfRI))
+       if (!is_mandated_params_set(&OspfRI))
                flog_warn(
                        EC_OSPF_LSA,
                        "RI (%s): lacks mandated ROUTER INFORMATION parameters",
index f6a190db80d7b8b92f80e0776ab8b29385fa499a..eb882c5d0e57df2ad4f32d77c092c970238824c0 100644 (file)
@@ -2074,13 +2074,17 @@ static int update_srgb(uint32_t lower, uint32_t size)
        osr_debug("SR(%s): Got new SRGB [%u/%u]", __func__, OspfSR.srgb.start,
                  OspfSR.srgb.start + OspfSR.srgb.size - 1);
 
-       /* SRGB is reserved, set Router Information parameters */
-       ospf_router_info_update_sr(true, OspfSR.self);
+       /* Update Self SR-Node */
+       if (OspfSR.self != NULL) {
+               /* SRGB is reserved, set Router Information parameters */
+               ospf_router_info_update_sr(true, OspfSR.self);
 
-       /* and update NHLFE entries */
-       hash_iterate(OspfSR.neighbors,
-                    (void (*)(struct hash_bucket *, void *))update_in_nhlfe,
-                    NULL);
+               /* and update NHLFE entries */
+               hash_iterate(
+                       OspfSR.neighbors,
+                       (void (*)(struct hash_bucket *, void *))update_in_nhlfe,
+                       NULL);
+       }
 
        return 0;
 }
@@ -2198,9 +2202,11 @@ DEFUN (sr_local_label_range,
        }
 
        /* SRLB is reserved, Update Self SR-Node and Router Information LSA */
-       OspfSR.self->srlb.lower_bound = lower;
-       OspfSR.self->srlb.range_size = upper - lower + 1;
-       ospf_router_info_update_sr(true, OspfSR.self);
+       if (OspfSR.self != NULL) {
+               OspfSR.self->srlb.lower_bound = lower;
+               OspfSR.self->srlb.range_size = upper - lower + 1;
+               ospf_router_info_update_sr(true, OspfSR.self);
+       }
 
        /* and update (LAN)-Adjacency SID */
        ospf_ext_link_srlb_update();
@@ -2250,8 +2256,8 @@ DEFUN (no_sr_local_label_range,
        if (OspfSR.self != NULL) {
                OspfSR.self->srlb.lower_bound = DEFAULT_SRLB_LABEL;
                OspfSR.self->srlb.range_size = DEFAULT_SRLB_SIZE;
+               ospf_router_info_update_sr(true, OspfSR.self);
        }
-       ospf_router_info_update_sr(true, OspfSR.self);
 
        /* and update (LAN)-Adjacency SID */
        ospf_ext_link_srlb_update();
@@ -2287,12 +2293,13 @@ DEFUN (sr_node_msd,
 
        /* Set this router MSD */
        OspfSR.msd = msd;
-       if (OspfSR.self != NULL)
+       if (OspfSR.self != NULL) {
                OspfSR.self->msd = msd;
 
-       /* Set Router Information parameters if SR is UP */
-       if (OspfSR.status == SR_UP)
-               ospf_router_info_update_sr(true, OspfSR.self);
+               /* Set Router Information parameters if SR is UP */
+               if (OspfSR.status == SR_UP)
+                       ospf_router_info_update_sr(true, OspfSR.self);
+       }
 
        return CMD_SUCCESS;
 }
@@ -2311,12 +2318,13 @@ DEFUN (no_sr_node_msd,
 
        /* unset this router MSD */
        OspfSR.msd = 0;
-       if (OspfSR.self != NULL)
+       if (OspfSR.self != NULL) {
                OspfSR.self->msd = 0;
 
-       /* Set Router Information parameters if SR is UP */
-       if (OspfSR.status == SR_UP)
-               ospf_router_info_update_sr(true, OspfSR.self);
+               /* Set Router Information parameters if SR is UP */
+               if (OspfSR.status == SR_UP)
+                       ospf_router_info_update_sr(true, OspfSR.self);
+       }
 
        return CMD_SUCCESS;
 }