summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-12-30 21:09:38 -0800
committerDavid S. Miller <davem@davemloft.net>2008-01-28 15:00:09 -0800
commitfcb8c156c8277ee9d71c8c81587d494c9c5240b3 (patch)
tree49ee171a80205f7c8d9cd9ae4e02955b547d11e6
parent15ca36fb994923b454df44e5d7aa14b84ce5aee4 (diff)
downloadlinux-fcb8c156c8277ee9d71c8c81587d494c9c5240b3.tar.gz
linux-fcb8c156c8277ee9d71c8c81587d494c9c5240b3.tar.bz2
linux-fcb8c156c8277ee9d71c8c81587d494c9c5240b3.zip
[IPSEC]: Fix double free on skb on async output
When the output transform returns EINPROGRESS due to async operation we'll free the skb the straight away as if it were an error. This patch fixes that so that the skb is freed when the async operation completes. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/xfrm/xfrm_output.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
index c1ba63efd7cb..81ad8eb2b283 100644
--- a/net/xfrm/xfrm_output.c
+++ b/net/xfrm/xfrm_output.c
@@ -78,6 +78,8 @@ static int xfrm_output_one(struct sk_buff *skb, int err)
spin_unlock_bh(&x->lock);
err = x->type->output(x, skb);
+ if (err == -EINPROGRESS)
+ goto out_exit;
resume:
if (err) {