From e69e13671dcbf3b6964e7bd9d485f267c5fa03cb Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Mon, 27 Sep 2021 01:25:19 +0200 Subject: util: Fix parsing of next option in ipv6_l4hdr() We need to update next header and header length as soon as we meet a new option header. Signed-off-by: Stefano Brivio --- util.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'util.c') diff --git a/util.c b/util.c index 6ce7c9a..285c0b6 100644 --- a/util.c +++ b/util.c @@ -92,6 +92,7 @@ char *ipv6_l4hdr(struct ipv6hdr *ip6h, uint8_t *proto) nh = ip6h->nexthdr; hdrlen = sizeof(struct ipv6hdr); } else { + o = (struct ipv6_opt_hdr *)(((char *)ip6h) + offset); nh = o->nexthdr; hdrlen = (o->hdrlen + 1) * 8; } @@ -103,8 +104,6 @@ char *ipv6_l4hdr(struct ipv6hdr *ip6h, uint8_t *proto) nh == 51 || nh == 60 || nh == 135 || nh == 139 || nh == 140 || nh == 253 || nh == 254) { offset += hdrlen; - o = (struct ipv6_opt_hdr *)(unsigned char *)ip6h + - offset; } else { *proto = nh; return (char *)(ip6h + 1) + offset; -- cgit v1.2.3