|
@@ -3076,14 +3076,14 @@ static bool xfrm_migrate_selector_match(const struct xfrm_selector *sel_cmp,
|
|
|
}
|
|
|
|
|
|
static struct xfrm_policy * xfrm_migrate_policy_find(const struct xfrm_selector *sel,
|
|
|
- u8 dir, u8 type)
|
|
|
+ u8 dir, u8 type, struct net *net)
|
|
|
{
|
|
|
struct xfrm_policy *pol, *ret = NULL;
|
|
|
struct hlist_head *chain;
|
|
|
u32 priority = ~0U;
|
|
|
|
|
|
read_lock_bh(&xfrm_policy_lock);
|
|
|
- chain = policy_hash_direct(&init_net, &sel->daddr, &sel->saddr, sel->family, dir);
|
|
|
+ chain = policy_hash_direct(net, &sel->daddr, &sel->saddr, sel->family, dir);
|
|
|
hlist_for_each_entry(pol, chain, bydst) {
|
|
|
if (xfrm_migrate_selector_match(sel, &pol->selector) &&
|
|
|
pol->type == type) {
|
|
@@ -3092,7 +3092,7 @@ static struct xfrm_policy * xfrm_migrate_policy_find(const struct xfrm_selector
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- chain = &init_net.xfrm.policy_inexact[dir];
|
|
|
+ chain = &net->xfrm.policy_inexact[dir];
|
|
|
hlist_for_each_entry(pol, chain, bydst) {
|
|
|
if (xfrm_migrate_selector_match(sel, &pol->selector) &&
|
|
|
pol->type == type &&
|
|
@@ -3216,7 +3216,7 @@ static int xfrm_migrate_check(const struct xfrm_migrate *m, int num_migrate)
|
|
|
|
|
|
int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
|
|
|
struct xfrm_migrate *m, int num_migrate,
|
|
|
- struct xfrm_kmaddress *k)
|
|
|
+ struct xfrm_kmaddress *k, struct net *net)
|
|
|
{
|
|
|
int i, err, nx_cur = 0, nx_new = 0;
|
|
|
struct xfrm_policy *pol = NULL;
|
|
@@ -3229,7 +3229,7 @@ int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
|
|
|
goto out;
|
|
|
|
|
|
/* Stage 1 - find policy */
|
|
|
- if ((pol = xfrm_migrate_policy_find(sel, dir, type)) == NULL) {
|
|
|
+ if ((pol = xfrm_migrate_policy_find(sel, dir, type, net)) == NULL) {
|
|
|
err = -ENOENT;
|
|
|
goto out;
|
|
|
}
|