From 66314e9fe0cbd867fdfe3dd7b2fc71c2e7983454 Mon Sep 17 00:00:00 2001 From: Igor Ryzhov Date: Mon, 15 Nov 2021 19:45:18 +0300 Subject: [PATCH] ospf6d: replace memcmp with correct comparisons Using memcmp with complex structures like prefix or ospf6_ls_origin is not correct, because even two structures with same values in all fields may have different values in padding bytes and comparison will fail. Signed-off-by: Igor Ryzhov --- ospf6d/ospf6_route.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h index 8be65fa349..633b8d77cd 100644 --- a/ospf6d/ospf6_route.h +++ b/ospf6d/ospf6_route.h @@ -291,14 +291,13 @@ extern const char *const ospf6_path_type_substr[OSPF6_PATH_TYPE_MAX]; #define OSPF6_ROUTE_PREFIX_STR "Display the route\n" #define OSPF6_ROUTE_MATCH_STR "Display the route matches the prefix\n" -#define ospf6_route_is_prefix(p, r) \ - (memcmp(p, &(r)->prefix, sizeof(struct prefix)) == 0) +#define ospf6_route_is_prefix(p, r) (prefix_same(p, &(r)->prefix)) #define ospf6_route_is_same(ra, rb) (prefix_same(&(ra)->prefix, &(rb)->prefix)) #define ospf6_route_is_same_origin(ra, rb) \ ((ra)->path.area_id == (rb)->path.area_id \ - && memcmp(&(ra)->path.origin, &(rb)->path.origin, \ - sizeof(struct ospf6_ls_origin)) \ - == 0) + && (ra)->path.origin.type == (rb)->path.origin.type \ + && (ra)->path.origin.id == (rb)->path.origin.id \ + && (ra)->path.origin.adv_router == (rb)->path.origin.adv_router) #define ospf6_route_is_best(r) (CHECK_FLAG ((r)->flag, OSPF6_ROUTE_BEST)) -- 2.39.5