In struct pkt_buff: - We only ever needed any 2 of len, data and tail. This has caused bugs in the past, e.g. commit 8a4316f31. Delete len, and where the value of pktb->len was required, use new PKTB_LEN macro. - head and data always had the same value. head was in the minority, so replace with data where it was used. Signed-off-by: Duncan Roe <duncan_roe@xxxxxxxxxxxxxxx> --- src/extra/ipv4.c | 2 +- src/extra/pktbuff.c | 21 +++++++-------------- src/internal.h | 3 +-- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/extra/ipv4.c b/src/extra/ipv4.c index c03f23f..8e36861 100644 --- a/src/extra/ipv4.c +++ b/src/extra/ipv4.c @@ -70,7 +70,7 @@ int nfq_ip_set_transport_header(struct pkt_buff *pktb, struct iphdr *iph) int doff = iph->ihl * 4; /* Wrong offset to IPv4 payload. */ - if ((int)pktb->len - doff <= 0) + if ((int)PKTB_LEN - doff <= 0) return -1; pktb->transport_header = pktb->network_header + doff; diff --git a/src/extra/pktbuff.c b/src/extra/pktbuff.c index 37f6bc0..0b67029 100644 --- a/src/extra/pktbuff.c +++ b/src/extra/pktbuff.c @@ -62,12 +62,10 @@ struct pkt_buff *pktb_alloc(int family, void *data, size_t len, size_t extra) pkt_data = (uint8_t *)pktb + sizeof(struct pkt_buff); memcpy(pkt_data, data, len); - pktb->len = len; pktb->data_len = len + extra; - pktb->head = pkt_data; pktb->data = pkt_data; - pktb->tail = pktb->head + len; + pktb->tail = pktb->data + len; switch(family) { case AF_INET: @@ -121,7 +119,7 @@ uint8_t *pktb_data(struct pkt_buff *pktb) EXPORT_SYMBOL uint32_t pktb_len(struct pkt_buff *pktb) { - return pktb->len; + return PKTB_LEN; } /** @@ -169,7 +167,6 @@ EXPORT_SYMBOL void pktb_push(struct pkt_buff *pktb, unsigned int len) { pktb->data -= len; - pktb->len += len; } /** @@ -181,7 +178,6 @@ EXPORT_SYMBOL void pktb_pull(struct pkt_buff *pktb, unsigned int len) { pktb->data += len; - pktb->len -= len; } /** @@ -193,7 +189,6 @@ EXPORT_SYMBOL void pktb_put(struct pkt_buff *pktb, unsigned int len) { pktb->tail += len; - pktb->len += len; } /** @@ -204,8 +199,7 @@ void pktb_put(struct pkt_buff *pktb, unsigned int len) EXPORT_SYMBOL void pktb_trim(struct pkt_buff *pktb, unsigned int len) { - pktb->len = len; - pktb->tail = pktb->head + len; + pktb->tail = pktb->data + len; } /** @@ -224,7 +218,7 @@ void pktb_trim(struct pkt_buff *pktb, unsigned int len) EXPORT_SYMBOL unsigned int pktb_tailroom(struct pkt_buff *pktb) { - return pktb->data_len - pktb->len; + return pktb->data_len - PKTB_LEN; } /** @@ -277,17 +271,16 @@ static int pktb_expand_tail(struct pkt_buff *pktb, int extra) * reallocation. Instead, increase the size of the extra room in * the tail in pktb_alloc. */ - if (pktb->len + extra > pktb->data_len) + if (PKTB_LEN + extra > pktb->data_len) return 0; - pktb->len += extra; pktb->tail = pktb->tail + extra; return 1; } static int enlarge_pkt(struct pkt_buff *pktb, unsigned int extra) { - if (pktb->len + extra > 65535) + if (PKTB_LEN + extra > 65535) return 0; if (!pktb_expand_tail(pktb, extra - pktb_tailroom(pktb))) @@ -346,7 +339,7 @@ int pktb_mangle(struct pkt_buff *pktb, if (rep_len > match_len) pktb_put(pktb, rep_len - match_len); else - pktb_trim(pktb, pktb->len + rep_len - match_len); + pktb_trim(pktb, PKTB_LEN + rep_len - match_len); pktb->mangled = true; return 1; diff --git a/src/internal.h b/src/internal.h index d968325..95ac03e 100644 --- a/src/internal.h +++ b/src/internal.h @@ -9,6 +9,7 @@ #else # define EXPORT_SYMBOL #endif +#define PKTB_LEN (pktb->tail - pktb->data) struct iphdr; struct ip6_hdr; @@ -23,11 +24,9 @@ struct pkt_buff { uint8_t *network_header; uint8_t *transport_header; - uint8_t *head; uint8_t *data; uint8_t *tail; - uint32_t len; uint32_t data_len; bool mangled; -- 2.14.5