@@ -86,7 +86,8 @@ struct ieee80211_local;
/* Only these features can be passed through mac80211 */
#define IEEE80211_SUPPORTED_NETDEV_FEATURES \
(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | \
- NETIF_F_HW_CSUM | NETIF_F_RXCSUM)
+ NETIF_F_HW_CSUM | NETIF_F_RXCSUM | \
+ NETIF_F_SG | NETIF_F_HIGHDMA)
struct ieee80211_fragment_entry {
unsigned long first_frag_time;
@@ -2848,6 +2848,12 @@ void __ieee80211_subif_start_xmit(struct sk_buff *skb,
goto out;
}
+ /* we cannot process non-linear frames on this path */
+ if (skb_linearize(skb)) {
+ kfree_skb(skb);
+ goto out;
+ }
+
/* the frame could be fragmented, software-encrypted, and other things
* so we cannot really handle checksum offload with it - fix it up in
* software before we handle anything else.