diff options
Diffstat (limited to 'net/ipv4/ipcomp.c')
-rw-r--r-- | net/ipv4/ipcomp.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c index 8e243589045f..3ed8b57a1002 100644 --- a/net/ipv4/ipcomp.c +++ b/net/ipv4/ipcomp.c | |||
@@ -80,15 +80,12 @@ out: | |||
80 | 80 | ||
81 | static int ipcomp_input(struct xfrm_state *x, struct sk_buff *skb) | 81 | static int ipcomp_input(struct xfrm_state *x, struct sk_buff *skb) |
82 | { | 82 | { |
83 | int err = 0; | 83 | int err = -ENOMEM; |
84 | struct iphdr *iph; | 84 | struct iphdr *iph; |
85 | struct ip_comp_hdr *ipch; | 85 | struct ip_comp_hdr *ipch; |
86 | 86 | ||
87 | if ((skb_is_nonlinear(skb) || skb_cloned(skb)) && | 87 | if (skb_linearize_cow(skb)) |
88 | skb_linearize(skb, GFP_ATOMIC) != 0) { | ||
89 | err = -ENOMEM; | ||
90 | goto out; | 88 | goto out; |
91 | } | ||
92 | 89 | ||
93 | skb->ip_summed = CHECKSUM_NONE; | 90 | skb->ip_summed = CHECKSUM_NONE; |
94 | 91 | ||
@@ -158,10 +155,8 @@ static int ipcomp_output(struct xfrm_state *x, struct sk_buff *skb) | |||
158 | goto out_ok; | 155 | goto out_ok; |
159 | } | 156 | } |
160 | 157 | ||
161 | if ((skb_is_nonlinear(skb) || skb_cloned(skb)) && | 158 | if (skb_linearize_cow(skb)) |
162 | skb_linearize(skb, GFP_ATOMIC) != 0) { | ||
163 | goto out_ok; | 159 | goto out_ok; |
164 | } | ||
165 | 160 | ||
166 | err = ipcomp_compress(x, skb); | 161 | err = ipcomp_compress(x, skb); |
167 | iph = skb->nh.iph; | 162 | iph = skb->nh.iph; |