Skip to content

Commit 315a597

Browse files
rleonSaeed Mahameed
authored andcommitted
net/mlx5e: Ignore IPsec replay window values on sender side
XFRM stack doesn't prevent from users to configure replay window in TX side and strongswan sets replay_window to be 1. It causes to failures in validation logic when trying to offload the SA. Replay window is not relevant in TX side and should be ignored. Fixes: cded6d8 ("net/mlx5e: Store replay window in XFRM attributes") Signed-off-by: Aya Levin <ayal@nvidia.com> Signed-off-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
1 parent 20f5468 commit 315a597

File tree

1 file changed

+8
-2
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core/en_accel

1 file changed

+8
-2
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,12 +336,17 @@ void mlx5e_ipsec_build_accel_xfrm_attrs(struct mlx5e_ipsec_sa_entry *sa_entry,
336336
/* iv len */
337337
aes_gcm->icv_len = x->aead->alg_icv_len;
338338

339+
attrs->dir = x->xso.dir;
340+
339341
/* esn */
340342
if (x->props.flags & XFRM_STATE_ESN) {
341343
attrs->replay_esn.trigger = true;
342344
attrs->replay_esn.esn = sa_entry->esn_state.esn;
343345
attrs->replay_esn.esn_msb = sa_entry->esn_state.esn_msb;
344346
attrs->replay_esn.overlap = sa_entry->esn_state.overlap;
347+
if (attrs->dir == XFRM_DEV_OFFLOAD_OUT)
348+
goto skip_replay_window;
349+
345350
switch (x->replay_esn->replay_window) {
346351
case 32:
347352
attrs->replay_esn.replay_window =
@@ -365,7 +370,7 @@ void mlx5e_ipsec_build_accel_xfrm_attrs(struct mlx5e_ipsec_sa_entry *sa_entry,
365370
}
366371
}
367372

368-
attrs->dir = x->xso.dir;
373+
skip_replay_window:
369374
/* spi */
370375
attrs->spi = be32_to_cpu(x->id.spi);
371376

@@ -501,7 +506,8 @@ static int mlx5e_xfrm_validate_state(struct mlx5_core_dev *mdev,
501506
return -EINVAL;
502507
}
503508

504-
if (x->replay_esn && x->replay_esn->replay_window != 32 &&
509+
if (x->replay_esn && x->xso.dir == XFRM_DEV_OFFLOAD_IN &&
510+
x->replay_esn->replay_window != 32 &&
505511
x->replay_esn->replay_window != 64 &&
506512
x->replay_esn->replay_window != 128 &&
507513
x->replay_esn->replay_window != 256) {

0 commit comments

Comments
 (0)