Skip to content

Commit

Permalink
ospfd: fix some dicey pointer arith in snmp module
Browse files Browse the repository at this point in the history
Coverity reports some uses of 'oid *' as if they were 'char *';
try to correct that.

Signed-off-by: Mark Stapp <[email protected]>
  • Loading branch information
Mark Stapp committed Sep 21, 2023
1 parent 4d64bad commit 438ef98
Showing 1 changed file with 13 additions and 13 deletions.
26 changes: 13 additions & 13 deletions ospfd/ospf_snmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -906,15 +906,15 @@ static struct ospf_lsa *ospfLsdbLookup(struct variable *v, oid *name,
area = ospf_area_lookup_by_area_id(ospf, *area_id);
if (!area)
return NULL;
offset += IN_ADDR_SIZE;
offset++;

/* Type. */
*type = *offset;
offset++;

/* LS ID. */
oid2in_addr(offset, IN_ADDR_SIZE, ls_id);
offset += IN_ADDR_SIZE;
offset++;

/* Router ID. */
oid2in_addr(offset, IN_ADDR_SIZE, router_id);
Expand Down Expand Up @@ -971,7 +971,7 @@ static struct ospf_lsa *ospfLsdbLookup(struct variable *v, oid *name,
}

/* Router ID. */
offset += IN_ADDR_SIZE;
offset++;
offsetlen -= IN_ADDR_SIZE;
len = offsetlen;

Expand All @@ -996,11 +996,11 @@ static struct ospf_lsa *ospfLsdbLookup(struct variable *v, oid *name,
/* Fill in value. */
offset = name + v->namelen;
oid_copy_in_addr(offset, area_id);
offset += IN_ADDR_SIZE;
offset++;
*offset = lsa->data->type;
offset++;
oid_copy_in_addr(offset, &lsa->data->id);
offset += IN_ADDR_SIZE;
offset++;
oid_copy_in_addr(offset,
&lsa->data->adv_router);

Expand Down Expand Up @@ -1106,7 +1106,7 @@ static struct ospf_area_range *ospfAreaRangeLookup(struct variable *v,
if (!area)
return NULL;

offset += IN_ADDR_SIZE;
offset++;

/* Lookup area range. */
oid2in_addr(offset, IN_ADDR_SIZE, range_net);
Expand Down Expand Up @@ -1135,7 +1135,7 @@ static struct ospf_area_range *ospfAreaRangeLookup(struct variable *v,
return NULL;

do {
offset += IN_ADDR_SIZE;
offset++;
offsetlen -= IN_ADDR_SIZE;
len = offsetlen;

Expand All @@ -1157,7 +1157,7 @@ static struct ospf_area_range *ospfAreaRangeLookup(struct variable *v,
/* Fill in value. */
offset = name + v->namelen;
oid_copy_in_addr(offset, area_id);
offset += IN_ADDR_SIZE;
offset++;
oid_copy_in_addr(offset, range_net);

return range;
Expand Down Expand Up @@ -1560,7 +1560,7 @@ static struct ospf_interface *ospfIfLookup(struct variable *v, oid *name,
*length = v->namelen + IN_ADDR_SIZE + 1;
offset = name + v->namelen;
oid_copy_in_addr(offset, ifaddr);
offset += IN_ADDR_SIZE;
offset++;
*offset = *ifindex;
return oi;
}
Expand Down Expand Up @@ -1704,7 +1704,7 @@ static struct ospf_interface *ospfIfMetricLookup(struct variable *v, oid *name,
*length = v->namelen + IN_ADDR_SIZE + 1 + 1;
offset = name + v->namelen;
oid_copy_in_addr(offset, ifaddr);
offset += IN_ADDR_SIZE;
offset++;
*offset = *ifindex;
offset++;
*offset = OSPF_SNMP_METRIC_VALUE;
Expand Down Expand Up @@ -2242,7 +2242,7 @@ static struct ospf_lsa *ospfExtLsdbLookup(struct variable *v, oid *name,

/* LS ID. */
oid2in_addr(offset, IN_ADDR_SIZE, ls_id);
offset += IN_ADDR_SIZE;
offset++;

/* Router ID. */
oid2in_addr(offset, IN_ADDR_SIZE, router_id);
Expand Down Expand Up @@ -2270,7 +2270,7 @@ static struct ospf_lsa *ospfExtLsdbLookup(struct variable *v, oid *name,

oid2in_addr(offset, len, ls_id);

offset += IN_ADDR_SIZE;
offset++;
offsetlen -= IN_ADDR_SIZE;

/* Router ID. */
Expand All @@ -2293,7 +2293,7 @@ static struct ospf_lsa *ospfExtLsdbLookup(struct variable *v, oid *name,
*offset = OSPF_AS_EXTERNAL_LSA;
offset++;
oid_copy_in_addr(offset, &lsa->data->id);
offset += IN_ADDR_SIZE;
offset++;
oid_copy_in_addr(offset, &lsa->data->adv_router);

return lsa;
Expand Down

1 comment on commit 438ef98

@MattiKoskinenUnikie
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it not a problem that the offset is advanced by just one (offset++) instead of previous IN_ADDR_SIZE?

Please sign in to comment.