| From 886dbe34714fbe18a252c20b55e1dd15721e7cef Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 16 Mar 2022 18:28:12 -0700 |
| Subject: net: bcmgenet: skip invalid partial checksums |
| |
| From: Doug Berger <opendmb@gmail.com> |
| |
| [ Upstream commit 0f643c88c8d240eba0ea25c2e095a46515ff46e9 ] |
| |
| The RXCHK block will return a partial checksum of 0 if it encounters |
| a problem while receiving a packet. Since a 1's complement sum can |
| only produce this result if no bits are set in the received data |
| stream it is fair to treat it as an invalid partial checksum and |
| not pass it up the stack. |
| |
| Fixes: 810155397890 ("net: bcmgenet: use CHECKSUM_COMPLETE for NETIF_F_RXCSUM") |
| Signed-off-by: Doug Berger <opendmb@gmail.com> |
| Acked-by: Florian Fainelli <f.fainelli@gmail.com> |
| Link: https://lore.kernel.org/r/20220317012812.1313196-1-opendmb@gmail.com |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/broadcom/genet/bcmgenet.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c |
| index e19cf020e5ae..a2062144d7ca 100644 |
| --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c |
| +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c |
| @@ -2239,8 +2239,10 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_rx_ring *ring, |
| dma_length_status = status->length_status; |
| if (dev->features & NETIF_F_RXCSUM) { |
| rx_csum = (__force __be16)(status->rx_csum & 0xffff); |
| - skb->csum = (__force __wsum)ntohs(rx_csum); |
| - skb->ip_summed = CHECKSUM_COMPLETE; |
| + if (rx_csum) { |
| + skb->csum = (__force __wsum)ntohs(rx_csum); |
| + skb->ip_summed = CHECKSUM_COMPLETE; |
| + } |
| } |
| |
| /* DMA flags and length are still valid no matter how |
| -- |
| 2.34.1 |
| |