summaryrefslogtreecommitdiff
path: root/net/ipv4/tcp_ipv4.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r--net/ipv4/tcp_ipv4.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 1660613ddae4..3845ab04a9b4 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1585,6 +1585,12 @@ int tcp_v4_rcv(struct sk_buff *skb)
if (!pskb_may_pull(skb, th->doff * 4))
goto discard_it;
+ /* Assuming a trustworthy entity did the checksum and found the csum
+ * invalid, drop the packet.
+ */
+ if (skb->ip_summed == CHECKSUM_COMPLETE && skb->csum_valid == 0)
+ goto csum_error;
+
/* An explanation is required here, I think.
* Packet length and doff are validated by header prediction,
* provided case of th->doff==0 is eliminated.