]> git.baikalelectronics.ru Git - kernel.git/commitdiff
packet: do not set TP_STATUS_CSUM_VALID on CHECKSUM_COMPLETE
authorWillem de Bruijn <willemb@google.com>
Mon, 28 Nov 2022 16:18:12 +0000 (11:18 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 8 Dec 2022 10:23:03 +0000 (11:23 +0100)
[ Upstream commit b85f628aa158a653c006e9c1405a117baef8c868 ]

CHECKSUM_COMPLETE signals that skb->csum stores the sum over the
entire packet. It does not imply that an embedded l4 checksum
field has been validated.

Fixes: 0ac6f3cd00f9 ("af_packet: pass checksum validation status to the user")
Signed-off-by: Willem de Bruijn <willemb@google.com>
Link: https://lore.kernel.org/r/20221128161812.640098-1-willemdebruijn.kernel@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/packet/af_packet.c

index 8f5ef28411992b77e9a3b55333f1369ae9d3ef9b..d76edafb4dff81444d307e6cb76c5238ef328134 100644 (file)
@@ -2222,8 +2222,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
        if (skb->ip_summed == CHECKSUM_PARTIAL)
                status |= TP_STATUS_CSUMNOTREADY;
        else if (skb->pkt_type != PACKET_OUTGOING &&
-                (skb->ip_summed == CHECKSUM_COMPLETE ||
-                 skb_csum_unnecessary(skb)))
+                skb_csum_unnecessary(skb))
                status |= TP_STATUS_CSUM_VALID;
 
        if (snaplen > res)
@@ -3451,8 +3450,7 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
                if (skb->ip_summed == CHECKSUM_PARTIAL)
                        aux.tp_status |= TP_STATUS_CSUMNOTREADY;
                else if (skb->pkt_type != PACKET_OUTGOING &&
-                        (skb->ip_summed == CHECKSUM_COMPLETE ||
-                         skb_csum_unnecessary(skb)))
+                        skb_csum_unnecessary(skb))
                        aux.tp_status |= TP_STATUS_CSUM_VALID;
 
                aux.tp_len = origlen;