X-Git-Url: https://git.proxmox.com/?p=pve-firewall.git;a=blobdiff_plain;f=src%2Fpvefw-logger.c;fp=src%2Fpvefw-logger.c;h=181d5f1e8b7520b008b7761943ce9d04f6e3b6cc;hp=f77f56f7f71be1e9eafa5f997639e3770e6e82aa;hb=98bd53b6dc624a8d98e5e54bdf6c8d278a3c8e32;hpb=2f46ee4f78ab45a13f6ca2830bcbaf45a8e8fe7a diff --git a/src/pvefw-logger.c b/src/pvefw-logger.c index f77f56f..181d5f1 100644 --- a/src/pvefw-logger.c +++ b/src/pvefw-logger.c @@ -575,6 +575,7 @@ print_nexthdr(struct log_entry *le, char *hdr, int payload_len, u_int8_t proto) return 0; struct ip6_ext *exthdr = (struct ip6_ext*)hdr; + int ext_len = 0; switch (proto) { /* protocols (these return) */ @@ -601,6 +602,7 @@ print_nexthdr(struct log_entry *le, char *hdr, int payload_len, u_int8_t proto) return -1; if (print_fragment(le, (struct ip6_frag*)hdr, payload_len) < 0) return -1; + ext_len = sizeof(struct ip6_frag); break; case IPPROTO_HOPOPTS: LEPRINTF("NEXTHDR=HOPOPTS "); @@ -628,8 +630,12 @@ print_nexthdr(struct log_entry *le, char *hdr, int payload_len, u_int8_t proto) /* next header: */ if (check_ip6ext(le, exthdr, payload_len) < 0) return -1; - hdr += exthdr->ip6e_len; - payload_len -= exthdr->ip6e_len; + if(ext_len == 0) { + ext_len = (exthdr->ip6e_len+1) * 8; + } + hdr += ext_len; + payload_len -= ext_len; + proto = exthdr->ip6e_nxt; } }