xfrm: properly handle invalid states as an error
authorTimo Teräs <timo.teras@iki.fi>
Wed, 22 May 2013 01:40:47 +0000 (01:40 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 23 May 2013 08:20:07 +0000 (01:20 -0700)
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>
net/xfrm/xfrm_output.c

index bcfda8921b5bf944d38ac3e087eb1cccfac327fe..0cf003dfa8fcd3d4f2f974f21649b164f76429b3 100644 (file)
@@ -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;
                }