vdpa/mlx5: fix overflow in queue attribute
authorMichael Baum <michaelba@nvidia.com>
Thu, 1 Jul 2021 06:39:15 +0000 (09:39 +0300)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 22 Jul 2021 12:48:07 +0000 (14:48 +0200)
The mlx5_vdpa_event_qp_create function makes shifting to the numeric
constant 1, then multiplies it by another constant and finally assigns
it into a uint64_t variable.

The numeric constant type is an int with a 32-bit sign. if after
shifting , its MSB (bit of sign) will change, the uint64 variable will
get into it a different value than what the function intended it to get.

Set the numeric constant 1 to be uint64_t in the first place.

Fixes: 8395927cdfaf ("vdpa/mlx5: prepare HW queues")
Cc: stable@dpdk.org
Signed-off-by: Michael Baum <michaelba@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/vdpa/mlx5/mlx5_vdpa_event.c

index 88f6a42..3541c65 100644 (file)
@@ -629,8 +629,8 @@ mlx5_vdpa_event_qp_create(struct mlx5_vdpa_priv *priv, uint16_t desc_n,
        attr.wq_umem_id = eqp->umem_obj->umem_id;
        attr.wq_umem_offset = 0;
        attr.dbr_umem_id = eqp->umem_obj->umem_id;
-       attr.dbr_address = (1 << log_desc_n) * MLX5_WSEG_SIZE;
        attr.ts_format = mlx5_ts_format_conv(priv->qp_ts_format);
+       attr.dbr_address = RTE_BIT64(log_desc_n) * MLX5_WSEG_SIZE;
        eqp->sw_qp = mlx5_devx_cmd_create_qp(priv->ctx, &attr);
        if (!eqp->sw_qp) {
                DRV_LOG(ERR, "Failed to create SW QP(%u).", rte_errno);