diff options
author | Timo Teräs <timo.teras@iki.fi> | 2013-05-22 01:40:47 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-05-23 01:20:07 -0700 |
commit | 497574c72c9922cf20c12aed15313c389f722fa0 (patch) | |
tree | 1ded621483211872633af219157427bc0cf26e43 /net/xfrm | |
parent | e4166625edfd2d808ddda00c7e7e901f4f3b8cc0 (diff) | |
download | op-kernel-dev-497574c72c9922cf20c12aed15313c389f722fa0.zip op-kernel-dev-497574c72c9922cf20c12aed15313c389f722fa0.tar.gz |
xfrm: properly handle invalid states as an error
The error exit path needs err explicitly set. Otherwise it
returns success and the only caller, xfrm_output_resume(),
would oops in skb_dst(skb)->ops derefence as skb_dst(skb) is
NULL.
Bug introduced in commit bb65a9cb (xfrm: removes a superfluous
check and add a statistic).
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Cc: Li RongQing <roy.qing.li@gmail.com>
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/xfrm')
-rw-r--r-- | net/xfrm/xfrm_output.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c index bcfda89..0cf003d 100644 --- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c @@ -64,6 +64,7 @@ static int xfrm_output_one(struct sk_buff *skb, int err) if (unlikely(x->km.state != XFRM_STATE_VALID)) { XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEINVALID); + err = -EINVAL; goto error; } |