mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 18:09:56 +00:00
net/mlx5e: psp, avoid 'accel' NULL pointer dereference
The 'accel' parameter of mlx5e_txwqe_build_eseg_csum() and the similar
'state' parameter of mlx5e_accel_tx_ids_len() were NULL when called
from mlx5i_sq_xmit() and were causing kernel panics from that context.
Fix that by passing in a local empty mlx5e_accel_tx_state variable, thus
guaranteeing that 'accel' is never NULL. Also remove an unnecessary
check from mlx5e_tx_wqe_inline_mode().
Fixes: e5a1861a29 ("net/mlx5e: Implement PSP Tx data path")
Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Link: https://patch.msgid.link/1760511923-890650-1-git-send-email-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
d0d3e9c286
commit
5348d63124
@@ -256,7 +256,7 @@ mlx5e_tx_wqe_inline_mode(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|||||||
u8 mode;
|
u8 mode;
|
||||||
|
|
||||||
#ifdef CONFIG_MLX5_EN_TLS
|
#ifdef CONFIG_MLX5_EN_TLS
|
||||||
if (accel && accel->tls.tls_tisn)
|
if (accel->tls.tls_tisn)
|
||||||
return MLX5_INLINE_MODE_TCP_UDP;
|
return MLX5_INLINE_MODE_TCP_UDP;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -982,6 +982,7 @@ void mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|||||||
struct mlx5e_tx_attr attr;
|
struct mlx5e_tx_attr attr;
|
||||||
struct mlx5i_tx_wqe *wqe;
|
struct mlx5i_tx_wqe *wqe;
|
||||||
|
|
||||||
|
struct mlx5e_accel_tx_state accel = {};
|
||||||
struct mlx5_wqe_datagram_seg *datagram;
|
struct mlx5_wqe_datagram_seg *datagram;
|
||||||
struct mlx5_wqe_ctrl_seg *cseg;
|
struct mlx5_wqe_ctrl_seg *cseg;
|
||||||
struct mlx5_wqe_eth_seg *eseg;
|
struct mlx5_wqe_eth_seg *eseg;
|
||||||
@@ -992,7 +993,7 @@ void mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|||||||
int num_dma;
|
int num_dma;
|
||||||
u16 pi;
|
u16 pi;
|
||||||
|
|
||||||
mlx5e_sq_xmit_prepare(sq, skb, NULL, &attr);
|
mlx5e_sq_xmit_prepare(sq, skb, &accel, &attr);
|
||||||
mlx5i_sq_calc_wqe_attr(skb, &attr, &wqe_attr);
|
mlx5i_sq_calc_wqe_attr(skb, &attr, &wqe_attr);
|
||||||
|
|
||||||
pi = mlx5e_txqsq_get_next_pi(sq, wqe_attr.num_wqebbs);
|
pi = mlx5e_txqsq_get_next_pi(sq, wqe_attr.num_wqebbs);
|
||||||
@@ -1009,7 +1010,7 @@ void mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
|
|||||||
|
|
||||||
mlx5i_txwqe_build_datagram(av, dqpn, dqkey, datagram);
|
mlx5i_txwqe_build_datagram(av, dqpn, dqkey, datagram);
|
||||||
|
|
||||||
mlx5e_txwqe_build_eseg_csum(sq, skb, NULL, eseg);
|
mlx5e_txwqe_build_eseg_csum(sq, skb, &accel, eseg);
|
||||||
|
|
||||||
eseg->mss = attr.mss;
|
eseg->mss = attr.mss;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user