Skip to content

Commit

Permalink
pasemi_mac: Fix CRC checks
Browse files Browse the repository at this point in the history
Make sure we don't feed packets with bad CRC up the network stack,
and discount the packet length as reported from the MAC for the CRC
field.

Signed-off-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Olof Johansson authored and Jeff Garzik committed Nov 10, 2007
1 parent dbd62af commit 32bee77
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions drivers/net/pasemi_mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,16 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit)

len = (macrx & XCT_MACRX_LLEN_M) >> XCT_MACRX_LLEN_S;

pci_unmap_single(mac->dma_pdev, dma, len, PCI_DMA_FROMDEVICE);

if (macrx & XCT_MACRX_CRC) {
/* CRC error flagged */
mac->netdev->stats.rx_errors++;
mac->netdev->stats.rx_crc_errors++;
dev_kfree_skb_irq(skb);
goto next;
}

if (len < 256) {
struct sk_buff *new_skb;

Expand All @@ -595,11 +605,10 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit)
} else
info->skb = NULL;

pci_unmap_single(mac->dma_pdev, dma, len, PCI_DMA_FROMDEVICE);

info->dma = 0;

skb_put(skb, len);
/* Don't include CRC */
skb_put(skb, len-4);

if (likely((macrx & XCT_MACRX_HTY_M) == XCT_MACRX_HTY_IPV4_OK)) {
skb->ip_summed = CHECKSUM_UNNECESSARY;
Expand All @@ -614,6 +623,7 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit)
skb->protocol = eth_type_trans(skb, mac->netdev);
netif_receive_skb(skb);

next:
RX_RING(mac, n) = 0;
RX_RING(mac, n+1) = 0;

Expand Down

0 comments on commit 32bee77

Please sign in to comment.