summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/extra/tcp.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/extra/tcp.c b/src/extra/tcp.c
index 2eb5763..bf161aa 100644
--- a/src/extra/tcp.c
+++ b/src/extra/tcp.c
@@ -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);