mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
RDMA/mlx5: Fix undefined shift of user RQ WQE size
[ Upstream commitd881d60223] set_rq_size() computes the RQ WQE size as "1 << rq_wqe_shift" based on the user-provided rq_wqe_shift, which is only checked to be greater than 32, so shifts of 32 are still accepted. A shift of 31 also overflows a signed integer, leading to undefined behavior. Use check_shl_overflow() to compute the RQ WQE size and reject any invalid values. Fixes:e126ba97db("mlx5: Add driver for Mellanox Connect-IB adapters") Link: https://patch.msgid.link/r/20260611-maher-sec-fixes-v1-1-cd8eb2542869@nvidia.com Signed-off-by: Maher Sanalla <msanalla@nvidia.com> Signed-off-by: Edward Srouji <edwards@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
87262e60ad
commit
6fc874fdfb
@@ -451,16 +451,13 @@ static int set_rq_size(struct mlx5_ib_dev *dev, struct ib_qp_cap *cap,
|
||||
|
||||
if (ucmd) {
|
||||
qp->rq.wqe_cnt = ucmd->rq_wqe_count;
|
||||
if (ucmd->rq_wqe_shift > BITS_PER_BYTE * sizeof(ucmd->rq_wqe_shift))
|
||||
return -EINVAL;
|
||||
qp->rq.wqe_shift = ucmd->rq_wqe_shift;
|
||||
if ((1 << qp->rq.wqe_shift) /
|
||||
sizeof(struct mlx5_wqe_data_seg) <
|
||||
wq_sig)
|
||||
if (check_shl_overflow(1, qp->rq.wqe_shift, &wqe_size))
|
||||
return -EINVAL;
|
||||
if (wqe_size / sizeof(struct mlx5_wqe_data_seg) < wq_sig)
|
||||
return -EINVAL;
|
||||
qp->rq.max_gs =
|
||||
(1 << qp->rq.wqe_shift) /
|
||||
sizeof(struct mlx5_wqe_data_seg) -
|
||||
wqe_size / sizeof(struct mlx5_wqe_data_seg) -
|
||||
wq_sig;
|
||||
qp->rq.max_post = qp->rq.wqe_cnt;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user