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>
This commit is contained in:
parent
e8a1d919d1
commit
02ff05c49d
|
@ -900,7 +900,7 @@ static void enc28j60_hw_rx(struct net_device *ndev)
|
||||||
if (RSV_GETBIT(rxstat, RSV_LENCHECKERR))
|
if (RSV_GETBIT(rxstat, RSV_LENCHECKERR))
|
||||||
ndev->stats.rx_frame_errors++;
|
ndev->stats.rx_frame_errors++;
|
||||||
} else {
|
} else {
|
||||||
skb = dev_alloc_skb(len);
|
skb = dev_alloc_skb(len + NET_IP_ALIGN);
|
||||||
if (!skb) {
|
if (!skb) {
|
||||||
if (netif_msg_rx_err(priv))
|
if (netif_msg_rx_err(priv))
|
||||||
dev_err(&ndev->dev,
|
dev_err(&ndev->dev,
|
||||||
|
@ -908,6 +908,7 @@ static void enc28j60_hw_rx(struct net_device *ndev)
|
||||||
ndev->stats.rx_dropped++;
|
ndev->stats.rx_dropped++;
|
||||||
} else {
|
} else {
|
||||||
skb->dev = ndev;
|
skb->dev = ndev;
|
||||||
|
skb_reserve(skb, NET_IP_ALIGN);
|
||||||
/* copy the packet from the receive buffer */
|
/* copy the packet from the receive buffer */
|
||||||
enc28j60_mem_read(priv, priv->next_pk_ptr + sizeof(rsv),
|
enc28j60_mem_read(priv, priv->next_pk_ptr + sizeof(rsv),
|
||||||
len, skb_put(skb, len));
|
len, skb_put(skb, len));
|
||||||
|
|
Loading…
Reference in New Issue