]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
xfrm: check bundle policy existance before dereferencing it
authorTimo Teräs <timo.teras@iki.fi>
Thu, 24 Jun 2010 21:35:00 +0000 (14:35 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 24 Jun 2010 21:35:00 +0000 (14:35 -0700)
Fix the bundle validation code to not assume having a valid policy.
When we have multiple transformations for a xfrm policy, the bundle
instance will be a chain of bundles with only the first one having
the policy reference. When policy_genid is bumped it will expire the
first bundle in the chain which is equivalent of expiring the whole
chain.

Reported-bisected-and-tested-by: Justin P. Mattock <justinmattock@gmail.com>
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/xfrm/xfrm_policy.c

index 4bf27d90133336a1f862e6c7b28e4939397284c5..af1c173be4ad88906d55d7efa24fb47fcd0cf19d 100644 (file)
@@ -2300,7 +2300,8 @@ int xfrm_bundle_ok(struct xfrm_policy *pol, struct xfrm_dst *first,
                        return 0;
                if (xdst->xfrm_genid != dst->xfrm->genid)
                        return 0;
-               if (xdst->policy_genid != atomic_read(&xdst->pols[0]->genid))
+               if (xdst->num_pols > 0 &&
+                   xdst->policy_genid != atomic_read(&xdst->pols[0]->genid))
                        return 0;
 
                if (strict && fl &&