diff options
Diffstat (limited to 'net/xfrm/xfrm_policy.c')
| -rw-r--r-- | net/xfrm/xfrm_policy.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index ff61d8557929..69b16ee327d9 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -2226,7 +2226,6 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,  				goto no_transform;  			} -			dst_hold(&xdst->u.dst);  			route = xdst->route;  		}  	} @@ -3308,9 +3307,15 @@ int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,  	struct xfrm_state *x_new[XFRM_MAX_DEPTH];  	struct xfrm_migrate *mp; +	/* Stage 0 - sanity checks */  	if ((err = xfrm_migrate_check(m, num_migrate)) < 0)  		goto out; +	if (dir >= XFRM_POLICY_MAX) { +		err = -EINVAL; +		goto out; +	} +  	/* Stage 1 - find policy */  	if ((pol = xfrm_migrate_policy_find(sel, dir, type, net)) == NULL) {  		err = -ENOENT;  | 
