Commit 8fcbc637 authored by Tushar Gohad's avatar Tushar Gohad Committed by David S. Miller

XFRM: Fix memory leak in xfrm_state_update

Upon "ip xfrm state update ..", xfrm_add_sa() takes an extra reference on
the user-supplied SA and forgets to drop the reference when
xfrm_state_update() returns 0.  This leads to a memory leak as the
parameter SA is never freed.  This change attempts to fix the leak by
calling __xfrm_state_put() when xfrm_state_update() updates a valid SA
(err = 0).  The parameter SA is added to the gc list when the final
reference is dropped by xfrm_add_sa() upon completion.
Signed-off-by: default avatarTushar Gohad <tgohad@mvista.com>
Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f8d96052
...@@ -1345,6 +1345,8 @@ int xfrm_state_update(struct xfrm_state *x) ...@@ -1345,6 +1345,8 @@ int xfrm_state_update(struct xfrm_state *x)
xfrm_state_check_expire(x1); xfrm_state_check_expire(x1);
err = 0; err = 0;
x->km.state = XFRM_STATE_DEAD;
__xfrm_state_put(x);
} }
spin_unlock_bh(&x1->lock); spin_unlock_bh(&x1->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment