Commit 050f91dc authored by Thomas Chou's avatar Thomas Chou Committed by David S. Miller

ethoc: align received packet to make IP header at word boundary

The packet buffer is allocated at 4 bytes boundary, but the IP header
length and version bits is located at byte 14. These bit fields access
as 32 bits word and caused exception on processors that do not support
unaligned access.

The patch adds 2 bytes offset to make the bit fields word aligned.
Signed-off-by: default avatarThomas Chou <thomas@wytron.com.tw>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3ee19a85
...@@ -399,6 +399,10 @@ static int ethoc_rx(struct net_device *dev, int limit) ...@@ -399,6 +399,10 @@ static int ethoc_rx(struct net_device *dev, int limit)
if (ethoc_update_rx_stats(priv, &bd) == 0) { if (ethoc_update_rx_stats(priv, &bd) == 0) {
int size = bd.stat >> 16; int size = bd.stat >> 16;
struct sk_buff *skb = netdev_alloc_skb(dev, size); struct sk_buff *skb = netdev_alloc_skb(dev, size);
size -= 4; /* strip the CRC */
skb_reserve(skb, 2); /* align TCP/IP header */
if (likely(skb)) { if (likely(skb)) {
void *src = phys_to_virt(bd.addr); void *src = phys_to_virt(bd.addr);
memcpy_fromio(skb_put(skb, size), src, size); memcpy_fromio(skb_put(skb, size), src, size);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment