diff -urN linux-2.6.27-rc6.orig/drivers/net/arm/at91_ether.c linux-2.6.27-rc6/drivers/net/arm/at91_ether.c --- linux-2.6.27-rc6.orig/drivers/net/arm/at91_ether.c 2008-09-14 20:15:27.000000000 +0200 +++ linux-2.6.27-rc6/drivers/net/arm/at91_ether.c 2008-09-16 21:10:55.000000000 +0200 @@ -888,6 +888,7 @@ while (dlist->descriptors[lp->rxBuffIndex].addr & EMAC_DESC_DONE) { p_recv = dlist->recv_buf[lp->rxBuffIndex]; pktlen = dlist->descriptors[lp->rxBuffIndex].size & 0x7ff; /* Length of frame including FCS */ + pktlen = pktlen - 4; /* omit 4-byte checksum */ skb = dev_alloc_skb(pktlen + 2); if (skb != NULL) { skb_reserve(skb, 2);