Patch "net/mlx5e: Do not increment ESN when updating IPsec ESN state" has been added to the 4.19-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net/mlx5e: Do not increment ESN when updating IPsec ESN state

to the 4.19-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-mlx5e-do-not-increment-esn-when-updating-ipsec-e.patch
and it can be found in the queue-4.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 82fabe0aec7abd75c74bcac2feb4140c3cbb3455
Author: Hyong Youb Kim <hyonkim@xxxxxxxxx>
Date:   Wed Oct 26 14:51:39 2022 +0100

    net/mlx5e: Do not increment ESN when updating IPsec ESN state
    
    [ Upstream commit 888be6b279b7257b5f6e4c9527675bff0a335596 ]
    
    An offloaded SA stops receiving after about 2^32 + replay_window
    packets. For example, when SA reaches <seq-hi 0x1, seq 0x2c>, all
    subsequent packets get dropped with SA-icv-failure (integrity_failed).
    
    To reproduce the bug:
    - ConnectX-6 Dx with crypto enabled (FW 22.30.1004)
    - ipsec.conf:
      nic-offload = yes
      replay-window = 32
      esn = yes
      salifetime=24h
    - Run netperf for a long time to send more than 2^32 packets
      netperf -H <device-under-test> -t TCP_STREAM -l 20000
    
    When 2^32 + replay_window packets are received, the replay window
    moves from the 2nd half of subspace (overlap=1) to the 1st half
    (overlap=0). The driver then updates the 'esn' value in NIC
    (i.e. seq_hi) as follows.
    
     seq_hi = xfrm_replay_seqhi(seq_bottom)
     new esn in NIC = seq_hi + 1
    
    The +1 increment is wrong, as seq_hi already contains the correct
    seq_hi. For example, when seq_hi=1, the driver actually tells NIC to
    use seq_hi=2 (esn). This incorrect esn value causes all subsequent
    packets to fail integrity checks (SA-icv-failure). So, do not
    increment.
    
    Fixes: cb01008390bb ("net/mlx5: IPSec, Add support for ESN")
    Signed-off-by: Hyong Youb Kim <hyonkim@xxxxxxxxx>
    Acked-by: Leon Romanovsky <leonro@xxxxxxxxxx>
    Signed-off-by: Saeed Mahameed <saeedm@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221026135153.154807-2-saeed@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
index c467f5e981f6..70087f2542b2 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c
@@ -117,7 +117,6 @@ static bool mlx5e_ipsec_update_esn_state(struct mlx5e_ipsec_sa_entry *sa_entry)
 	struct xfrm_replay_state_esn *replay_esn;
 	u32 seq_bottom;
 	u8 overlap;
-	u32 *esn;
 
 	if (!(sa_entry->x->props.flags & XFRM_STATE_ESN)) {
 		sa_entry->esn_state.trigger = 0;
@@ -130,11 +129,9 @@ static bool mlx5e_ipsec_update_esn_state(struct mlx5e_ipsec_sa_entry *sa_entry)
 
 	sa_entry->esn_state.esn = xfrm_replay_seqhi(sa_entry->x,
 						    htonl(seq_bottom));
-	esn = &sa_entry->esn_state.esn;
 
 	sa_entry->esn_state.trigger = 1;
 	if (unlikely(overlap && seq_bottom < MLX5E_IPSEC_ESN_SCOPE_MID)) {
-		++(*esn);
 		sa_entry->esn_state.overlap = 0;
 		return true;
 	} else if (unlikely(!overlap &&



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux