diff options
| -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 ed38d5d81f9e..e09edfcf1b79 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
| @@ -1832,6 +1832,13 @@ static int xdst_queue_output(struct sk_buff *skb) | |||
| 1832 | struct dst_entry *dst = skb_dst(skb); | 1832 | struct dst_entry *dst = skb_dst(skb); |
| 1833 | struct xfrm_dst *xdst = (struct xfrm_dst *) dst; | 1833 | struct xfrm_dst *xdst = (struct xfrm_dst *) dst; |
| 1834 | struct xfrm_policy_queue *pq = &xdst->pols[0]->polq; | 1834 | struct xfrm_policy_queue *pq = &xdst->pols[0]->polq; |
| 1835 | const struct sk_buff *fclone = skb + 1; | ||
| 1836 | |||
| 1837 | if (unlikely(skb->fclone == SKB_FCLONE_ORIG && | ||
| 1838 | fclone->fclone == SKB_FCLONE_CLONE)) { | ||
| 1839 | kfree_skb(skb); | ||
| 1840 | return 0; | ||
| 1841 | } | ||
| 1835 | 1842 | ||
| 1836 | if (pq->hold_queue.qlen > XFRM_MAX_QUEUE_LEN) { | 1843 | if (pq->hold_queue.qlen > XFRM_MAX_QUEUE_LEN) { |
| 1837 | kfree_skb(skb); | 1844 | kfree_skb(skb); |
