diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2008-03-06 03:51:19 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-03-06 03:51:19 +0100 |
commit | 02ff05c49d7804f2574f358a937b43a41d15e36e (patch) | |
tree | 487a599ee51d81fda4f7f8fdb6446e6e40ae16c4 | |
parent | drivers/net/ac3200.c: replace init_module&cleanup_module with module_init&mod... (diff) | |
download | linux-02ff05c49d7804f2574f358a937b43a41d15e36e.tar.xz linux-02ff05c49d7804f2574f358a937b43a41d15e36e.zip |
net/enc28j60: oops fix
Prevent oops on enc28j60 packet RX: make sure buffers are aligned.
Not all architectures support unaligned accesses in kernel space.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Claudio Lanconelli <lanconelli.claudio@eptar.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/enc28j60.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/enc28j60.c b/drivers/net/enc28j60.c index 0809a6a5a286..46a90e9ec563 100644 --- a/drivers/net/enc28j60.c +++ b/drivers/net/enc28j60.c @@ -900,7 +900,7 @@ static void enc28j60_hw_rx(struct net_device *ndev) if (RSV_GETBIT(rxstat, RSV_LENCHECKERR)) ndev->stats.rx_frame_errors++; } else { - skb = dev_alloc_skb(len); + skb = dev_alloc_skb(len + NET_IP_ALIGN); if (!skb) { if (netif_msg_rx_err(priv)) dev_err(&ndev->dev, @@ -908,6 +908,7 @@ static void enc28j60_hw_rx(struct net_device *ndev) ndev->stats.rx_dropped++; } else { skb->dev = ndev; + skb_reserve(skb, NET_IP_ALIGN); /* copy the packet from the receive buffer */ enc28j60_mem_read(priv, priv->next_pk_ptr + sizeof(rsv), len, skb_put(skb, len)); |