extra: tcp: insufficient sanitization in nfq_tcp_get_payload()
authorPablo Neira Ayuso <pablo@netfilter.org>
Mon, 30 Jun 2014 10:18:07 +0000 (12:18 +0200)
committerr.kubiak <r.kubiak@samsung.com>
Mon, 16 Nov 2015 13:12:07 +0000 (14:12 +0100)
Similar to 7335cbe ("extra: fix wrong implementation in
nfq_udp_get_payload").

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/extra/tcp.c

index 2eb5763..bf161aa 100644 (file)
@@ -59,13 +59,17 @@ EXPORT_SYMBOL(nfq_tcp_get_hdr);
  */
 void *nfq_tcp_get_payload(struct tcphdr *tcph, struct pkt_buff *pktb)
 {
-       unsigned int doff = tcph->doff * 4;
+       unsigned int len = tcph->doff * 4;
+
+       /* TCP packet is too short */
+       if (len < sizeof(struct tcphdr))
+               return NULL;
 
        /* malformed TCP data offset. */
-       if (pktb->transport_header + doff >= pktb->tail)
+       if (pktb->transport_header + len > pktb->tail)
                return NULL;
 
-       return pktb->transport_header + doff;
+       return pktb->transport_header + len;
 }
 EXPORT_SYMBOL(nfq_tcp_get_payload);