diff options
Diffstat (limited to 'net/xfrm/xfrm_policy.c')
-rw-r--r-- | net/xfrm/xfrm_policy.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 76e1873811d4..9a91f7431c41 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
@@ -1844,6 +1844,13 @@ static int xdst_queue_output(struct sk_buff *skb) | |||
1844 | struct xfrm_dst *xdst = (struct xfrm_dst *) dst; | 1844 | struct xfrm_dst *xdst = (struct xfrm_dst *) dst; |
1845 | struct xfrm_policy *pol = xdst->pols[0]; | 1845 | struct xfrm_policy *pol = xdst->pols[0]; |
1846 | struct xfrm_policy_queue *pq = &pol->polq; | 1846 | struct xfrm_policy_queue *pq = &pol->polq; |
1847 | const struct sk_buff *fclone = skb + 1; | ||
1848 | |||
1849 | if (unlikely(skb->fclone == SKB_FCLONE_ORIG && | ||
1850 | fclone->fclone == SKB_FCLONE_CLONE)) { | ||
1851 | kfree_skb(skb); | ||
1852 | return 0; | ||
1853 | } | ||
1847 | 1854 | ||
1848 | if (pq->hold_queue.qlen > XFRM_MAX_QUEUE_LEN) { | 1855 | if (pq->hold_queue.qlen > XFRM_MAX_QUEUE_LEN) { |
1849 | kfree_skb(skb); | 1856 | kfree_skb(skb); |