Commit b1312c89 authored by Timo Teräs's avatar Timo Teräs Committed by David S. Miller
Browse files

xfrm: check bundle policy existance before dereferencing it



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: default avatarJustin P. Mattock <justinmattock@gmail.com>
Signed-off-by: default avatarTimo Teräs <timo.teras@iki.fi>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 38000a94
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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 &&