summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancois Dumontet <francois.dumontet@6wind.com>2023-09-20 17:26:12 +0200
committerFrancois Dumontet <francois.dumontet@6wind.com>2023-09-20 19:22:58 +0200
commitc0b1105e78ed6e4eb3298ddef368279268da455a (patch)
tree9df93e82c656c1af7f57774661cc9bb3d1702ab6
parent0c9aabe76040dff04c76b127f92087236a623451 (diff)
bgpd: fix coverity issue on aspath_filter_exclude_acl
CID 1566378 (#1-4 of 4): Use after free (USE_AFTER_FREE)76. use_after_free: Using freed pointer cur_seg. now the prev_seg pointer is set with always existaing values. Link: https://scan7.scan.coverity.com/reports.htm#v39104/p13747/fileInstanceId=146858993&defectInstanceId=18968273&mergedDefectId=1566378&fileStart=1376&fileEnd=1625 Fixes: 4685db418e3a861205a28f975afeb9869f674337 (bgpd: add set as-path exclude acl-list command) Signed-off-by: Francois Dumontet <francois.dumontet@6wind.com>
-rw-r--r--bgpd/bgp_aspath.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/bgpd/bgp_aspath.c b/bgpd/bgp_aspath.c
index 2e2248cd72..fc13085437 100644
--- a/bgpd/bgp_aspath.c
+++ b/bgpd/bgp_aspath.c
@@ -1703,7 +1703,7 @@ struct aspath *aspath_filter_exclude_acl(struct aspath *source,
if (cur_seg == source->segments)
/* first segment */
source->segments = cur_seg->next;
- else
+ else if (prev_seg)
prev_seg->next = cur_seg->next;
assegment_free(cur_seg);
}
@@ -1725,8 +1725,9 @@ struct aspath *aspath_filter_exclude_acl(struct aspath *source,
else if (prev_seg)
prev_seg->next = new_seg;
assegment_free(cur_seg);
- }
- prev_seg = cur_seg;
+ prev_seg = new_seg;
+ } else
+ prev_seg = cur_seg;
cur_seg = next_seg;
}