mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
net/mlx5e: XDP, Avoid checksum complete when XDP prog is loaded
[ Upstream commit5d0bb3bac4] XDP programs might change packets data contents which will make the reported skb checksum (checksum complete) invalid. When XDP programs are loaded/unloaded set/clear rx RQs MLX5E_RQ_STATE_NO_CSUM_COMPLETE flag. Fixes:86994156c7("net/mlx5e: XDP fast RX drop bpf programs support") Reviewed-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
79e972a89c
commit
c95ebb394d
@@ -1517,7 +1517,8 @@ static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable)
|
||||
struct mlx5e_channel *c;
|
||||
int i;
|
||||
|
||||
if (!test_bit(MLX5E_STATE_OPENED, &priv->state))
|
||||
if (!test_bit(MLX5E_STATE_OPENED, &priv->state) ||
|
||||
priv->channels.params.xdp_prog)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < channels->num; i++) {
|
||||
|
||||
@@ -934,7 +934,11 @@ static int mlx5e_open_rq(struct mlx5e_channel *c,
|
||||
if (params->rx_dim_enabled)
|
||||
__set_bit(MLX5E_RQ_STATE_AM, &c->rq.state);
|
||||
|
||||
if (params->pflags & MLX5E_PFLAG_RX_NO_CSUM_COMPLETE)
|
||||
/* We disable csum_complete when XDP is enabled since
|
||||
* XDP programs might manipulate packets which will render
|
||||
* skb->checksum incorrect.
|
||||
*/
|
||||
if (MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_NO_CSUM_COMPLETE) || c->xdp)
|
||||
__set_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &c->rq.state);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -754,7 +754,8 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
|
||||
return;
|
||||
}
|
||||
|
||||
if (unlikely(test_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &rq->state)))
|
||||
/* True when explicitly set via priv flag, or XDP prog is loaded */
|
||||
if (test_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &rq->state))
|
||||
goto csum_unnecessary;
|
||||
|
||||
/* CQE csum doesn't cover padding octets in short ethernet
|
||||
|
||||
Reference in New Issue
Block a user