diff options
Diffstat (limited to 'net/xfrm/xfrm_policy.c')
-rw-r--r-- | net/xfrm/xfrm_policy.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index af8e38f47b5b..a3dc7ab0b7ed 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
@@ -3279,11 +3279,6 @@ static int xfrm_migrate_check(const struct xfrm_migrate *m, int num_migrate) | |||
3279 | return -EINVAL; | 3279 | return -EINVAL; |
3280 | 3280 | ||
3281 | for (i = 0; i < num_migrate; i++) { | 3281 | for (i = 0; i < num_migrate; i++) { |
3282 | if (xfrm_addr_equal(&m[i].old_daddr, &m[i].new_daddr, | ||
3283 | m[i].old_family) && | ||
3284 | xfrm_addr_equal(&m[i].old_saddr, &m[i].new_saddr, | ||
3285 | m[i].old_family)) | ||
3286 | return -EINVAL; | ||
3287 | if (xfrm_addr_any(&m[i].new_daddr, m[i].new_family) || | 3282 | if (xfrm_addr_any(&m[i].new_daddr, m[i].new_family) || |
3288 | xfrm_addr_any(&m[i].new_saddr, m[i].new_family)) | 3283 | xfrm_addr_any(&m[i].new_saddr, m[i].new_family)) |
3289 | return -EINVAL; | 3284 | return -EINVAL; |
@@ -3307,7 +3302,8 @@ static int xfrm_migrate_check(const struct xfrm_migrate *m, int num_migrate) | |||
3307 | 3302 | ||
3308 | int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type, | 3303 | int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type, |
3309 | struct xfrm_migrate *m, int num_migrate, | 3304 | struct xfrm_migrate *m, int num_migrate, |
3310 | struct xfrm_kmaddress *k, struct net *net) | 3305 | struct xfrm_kmaddress *k, struct net *net, |
3306 | struct xfrm_encap_tmpl *encap) | ||
3311 | { | 3307 | { |
3312 | int i, err, nx_cur = 0, nx_new = 0; | 3308 | int i, err, nx_cur = 0, nx_new = 0; |
3313 | struct xfrm_policy *pol = NULL; | 3309 | struct xfrm_policy *pol = NULL; |
@@ -3330,7 +3326,8 @@ int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type, | |||
3330 | if ((x = xfrm_migrate_state_find(mp, net))) { | 3326 | if ((x = xfrm_migrate_state_find(mp, net))) { |
3331 | x_cur[nx_cur] = x; | 3327 | x_cur[nx_cur] = x; |
3332 | nx_cur++; | 3328 | nx_cur++; |
3333 | if ((xc = xfrm_state_migrate(x, mp))) { | 3329 | xc = xfrm_state_migrate(x, mp, encap); |
3330 | if (xc) { | ||
3334 | x_new[nx_new] = xc; | 3331 | x_new[nx_new] = xc; |
3335 | nx_new++; | 3332 | nx_new++; |
3336 | } else { | 3333 | } else { |
@@ -3351,7 +3348,7 @@ int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type, | |||
3351 | } | 3348 | } |
3352 | 3349 | ||
3353 | /* Stage 5 - announce */ | 3350 | /* Stage 5 - announce */ |
3354 | km_migrate(sel, dir, type, m, num_migrate, k); | 3351 | km_migrate(sel, dir, type, m, num_migrate, k, encap); |
3355 | 3352 | ||
3356 | xfrm_pol_put(pol); | 3353 | xfrm_pol_put(pol); |
3357 | 3354 | ||