xfrm: fix __xfrm_route_forward()
authorEric Dumazet <eric.dumazet@gmail.com>
Tue, 15 Mar 2011 22:26:43 +0000 (15:26 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Mar 2011 22:26:43 +0000 (15:26 -0700)
This function should return 0 in case of error, 1 if OK
commit 452edd598f60522 (xfrm: Return dst directly from xfrm_lookup())
got it wrong.

Reported-and-bisected-by: Michael Smith <msmith@cbnco.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/xfrm/xfrm_policy.c

index 1ba0258b49c7da53feeecbdf43c7c5a331303de4..027e3c6fb7e4442189773eda8ddbaf9fd283485a 100644 (file)
@@ -2175,7 +2175,7 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family)
        struct net *net = dev_net(skb->dev);
        struct flowi fl;
        struct dst_entry *dst;
-       int res = 0;
+       int res = 1;
 
        if (xfrm_decode_session(skb, &fl, family) < 0) {
                XFRM_INC_STATS(net, LINUX_MIB_XFRMFWDHDRERROR);
@@ -2186,7 +2186,7 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family)
 
        dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, 0);
        if (IS_ERR(dst)) {
-               res = 1;
+               res = 0;
                dst = NULL;
        }
        skb_dst_set(skb, dst);