diff options
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index fb766d906148..588b473194a8 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1948,8 +1948,12 @@ again: | |||
1948 | goto again; | 1948 | goto again; |
1949 | } | 1949 | } |
1950 | out_unlock: | 1950 | out_unlock: |
1951 | if (pt_prev) | 1951 | if (pt_prev) { |
1952 | pt_prev->func(skb2, skb->dev, pt_prev, skb->dev); | 1952 | if (!skb_orphan_frags_rx(skb2, GFP_ATOMIC)) |
1953 | pt_prev->func(skb2, skb->dev, pt_prev, skb->dev); | ||
1954 | else | ||
1955 | kfree_skb(skb2); | ||
1956 | } | ||
1953 | rcu_read_unlock(); | 1957 | rcu_read_unlock(); |
1954 | } | 1958 | } |
1955 | EXPORT_SYMBOL_GPL(dev_queue_xmit_nit); | 1959 | EXPORT_SYMBOL_GPL(dev_queue_xmit_nit); |
@@ -3892,6 +3896,7 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb, | |||
3892 | __skb_pull(skb, off); | 3896 | __skb_pull(skb, off); |
3893 | else if (off < 0) | 3897 | else if (off < 0) |
3894 | __skb_push(skb, -off); | 3898 | __skb_push(skb, -off); |
3899 | skb->mac_header += off; | ||
3895 | 3900 | ||
3896 | switch (act) { | 3901 | switch (act) { |
3897 | case XDP_REDIRECT: | 3902 | case XDP_REDIRECT: |