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: |
