diff options
Diffstat (limited to 'net/xfrm/xfrm_output.c')
| -rw-r--r-- | net/xfrm/xfrm_output.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c index b9fe13138c07..64f2ae1fdc15 100644 --- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/netdevice.h> | 14 | #include <linux/netdevice.h> |
| 15 | #include <linux/netfilter.h> | 15 | #include <linux/netfilter.h> |
| 16 | #include <linux/skbuff.h> | 16 | #include <linux/skbuff.h> |
| 17 | #include <linux/slab.h> | ||
| 17 | #include <linux/spinlock.h> | 18 | #include <linux/spinlock.h> |
| 18 | #include <net/dst.h> | 19 | #include <net/dst.h> |
| 19 | #include <net/xfrm.h> | 20 | #include <net/xfrm.h> |
| @@ -94,13 +95,13 @@ resume: | |||
| 94 | goto error_nolock; | 95 | goto error_nolock; |
| 95 | } | 96 | } |
| 96 | 97 | ||
| 97 | dst = dst_pop(dst); | 98 | dst = skb_dst_pop(skb); |
| 98 | if (!dst) { | 99 | if (!dst) { |
| 99 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR); | 100 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR); |
| 100 | err = -EHOSTUNREACH; | 101 | err = -EHOSTUNREACH; |
| 101 | goto error_nolock; | 102 | goto error_nolock; |
| 102 | } | 103 | } |
| 103 | skb_dst_set(skb, dst); | 104 | skb_dst_set(skb, dst_clone(dst)); |
| 104 | x = dst->xfrm; | 105 | x = dst->xfrm; |
| 105 | } while (x && !(x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL)); | 106 | } while (x && !(x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL)); |
| 106 | 107 | ||
