From 23508fff9faf89800e828bfe1ac227ecc647599a Mon Sep 17 00:00:00 2001 From: Erik Kooistra Date: Wed, 28 Apr 2021 15:28:28 +0200 Subject: [PATCH] ospfd: Fixed some ASAN errors This fixes 2 asan errors: If we only have a TLV_ROUTER_ADDR don't continue after we skipped it. Fixed length when parsing EXT_TLV_LINK_SIZE. Signed-off-by: Erik Kooistra --- ospfd/ospf_te.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ospfd/ospf_te.c b/ospfd/ospf_te.c index f2842538a5..1929e3dea4 100644 --- a/ospfd/ospf_te.c +++ b/ospfd/ospf_te.c @@ -2153,6 +2153,13 @@ static int ospf_te_parse_te(struct ls_ted *ted, struct ospf_lsa *lsa) /* Initialize TLV browsing */ tlvh = TLV_HDR_TOP(lsa->data); + uint32_t total_len = TLV_BODY_SIZE(lsa->data) - OSPF_LSA_HEADER_SIZE; + + /* If TE Router-ID is only TLV we are done */ + if (ntohs(tlvh->type) == TE_TLV_ROUTER_ADDR + && total_len == sizeof(struct te_tlv_router_addr)) + return 0; + /* Skip TE Router-ID if present */ if (ntohs(tlvh->type) == TE_TLV_ROUTER_ADDR) tlvh = TLV_HDR_NEXT(tlvh); @@ -2756,7 +2763,7 @@ static int ospf_te_parse_ext_link(struct ls_ted *ted, struct ospf_lsa *lsa) &lsa->data->id, &edge->attributes->standard.local); /* Initialize TLV browsing */ - len = TLV_BODY_SIZE(&ext->header); + len = TLV_BODY_SIZE(&ext->header) - EXT_TLV_LINK_SIZE; tlvh = (struct tlv_header *)((char *)(ext) + TLV_HDR_SIZE + EXT_TLV_LINK_SIZE); for (; sum < len; tlvh = TLV_HDR_NEXT(tlvh)) { -- 2.39.5