Ignore:
Timestamp:
2010-03-27T14:05:27+01:00 (7 years ago)
Author:
juhosg
Message:

ar71xx: ag71xx: copy received packet to avoid unaligned access in the IP stack

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c

    r20505 r20506  
    760760} 
    761761 
     762static int ag71xx_rx_copy_skb(struct ag71xx *ag, struct sk_buff **pskb, 
     763                              int pktlen) 
     764{ 
     765        struct sk_buff *copy_skb; 
     766 
     767        copy_skb = netdev_alloc_skb(ag->dev, pktlen + NET_IP_ALIGN); 
     768        if (!copy_skb) 
     769                return -ENOMEM; 
     770 
     771        skb_reserve(copy_skb, NET_IP_ALIGN); 
     772        skb_copy_from_linear_data(*pskb, copy_skb->data, pktlen); 
     773        dev_kfree_skb_any(*pskb); 
     774        *pskb = copy_skb; 
     775 
     776        return 0; 
     777} 
     778 
    762779static int ag71xx_rx_packets(struct ag71xx *ag, int limit) 
    763780{ 
     
    799816                if (ag71xx_has_ar8216(ag)) 
    800817                        err = ag71xx_remove_ar8216_header(ag, skb); 
     818                else 
     819                        err = ag71xx_rx_copy_skb(ag, &skb, pktlen); 
    801820 
    802821                if (err) { 
Note: See TracChangeset for help on using the changeset viewer.