From: Yishai Hadas <yishaih@nvidia.com>
To: <netdev-bot+sashiko@kernel.org>
Cc: <jgg@ziepe.ca>, <leon@kernel.org>, <linux-rdma@vger.kernel.org>,
<netdev@vger.kernel.org>, <saeedm@nvidia.com>,
<tariqt@nvidia.com>, <mbloch@nvidia.com>, <kuba@kernel.org>,
<pabeni@redhat.com>, <edumazet@kernel.org>, <davem@davemloft.net>,
<andrew+netdev@lunn.ch>, <dtatulea@nvidia.com>,
<moshe@nvidia.com>, <maorg@nvidia.com>
Subject: Re: [PATCH rdma-next 18/23] RDMA/mlx5: Validate firmware RQ/SQ state before sqrq_trans[] lookup
Date: Mon, 9 Nov 2026 12:24:17 +0200 [thread overview]
Message-ID: <a1abb4d5-022b-4ba7-b4f6-56ea4e7fdce2@nvidia.com> (raw)
In-Reply-To: <179408310322.994134.9461475387371859568@kernel.org>
On 07/11/2026 22:25, netdev-bot+sashiko@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential
> issue(s) to consider.
>
> Critical: 0 · High: 0 · Medium: 1 · Low: 0
>
> If you believe none of the issues are legitimate, please reply to each
> issue of Medium severity or higher and explain why the AI is wrong.
> If any of them are legitimate and you plan to respin, please let patchwork
> know by including "pw-bot: cr" as a separate line at the end of your reply
> (one such reply per series is enough).
>
> - [Medium] The new check in sqrq_state_to_qp_state()
> (drivers/infiniband/hw/mlx5/qp.c:5084) bounds the firmware SQ/RQ state…
>
> --
>
> RDMA/mlx5: Validate firmware RQ/SQ state before sqrq_trans[] lookup
>
> This commit adds a bounds check to sqrq_state_to_qp_state() in
> drivers/infiniband/hw/mlx5/qp.c. Any SQ or RQ state returned by QUERY_SQ
> or QUERY_RQ that is at or above the sqrq_trans[] table dimension is now
> rejected with -EIO, which prevents an out-of-bounds read of the 5x5
> table.
>
>> diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
>> index 19cbf6b2b979d..05e8e75d734fb 100644
>> --- a/drivers/infiniband/hw/mlx5/qp.c
>> +++ b/drivers/infiniband/hw/mlx5/qp.c
>> @@ -5081,6 +5081,9 @@ static int sqrq_state_to_qp_state(u8 sq_state, u8 rq_state,
>> },
>> };
>>
>> + if (sq_state >= MLX5_SQ_NUM_STATE || rq_state >= MLX5_RQ_NUM_STATE)
>> + return -EIO;
>> +
>> *qp_state = sqrq_trans[rq_state][sq_state];
>
> [Severity: Medium]
> Should this check compare against the hardware state encodings instead of
> the table size?
>
> The hardware only defines three values in include/linux/mlx5/mlx5_ifc.h.
> The RQC values are the same:
>
> MLX5_SQC_STATE_RST = 0x0,
> MLX5_SQC_STATE_RDY = 0x1,
> MLX5_SQC_STATE_ERR = 0x3,
>
> The table dimension comes from a driver-only sentinel in
> include/linux/mlx5/qp.h:
>
> MLX5_SQ_STATE_NA = MLX5_SQC_STATE_ERR + 1,
> MLX5_SQ_NUM_STATE = MLX5_SQ_STATE_NA + 1,
>
> That means firmware values 2 and 4 still get past the new check.
>
> query_raw_packet_qp_rq_state() passes the raw 4-bit field through
> unchanged, and mlx5_core_query_sq_state() does the same for the SQ:
>
> *rq_state = MLX5_GET(rqc, rqc, state);
>
> query_raw_packet_qp_state() sets the NA sentinel by default and only
> overwrites it for queues that exist:
>
> u8 sq_state = MLX5_SQ_STATE_NA;
> u8 rq_state = MLX5_RQ_STATE_NA;
>
> if (qp->sq.wqe_cnt) {
> err = query_raw_packet_qp_sq_state(dev, sq, &sq_state);
> ...
>
> Take an SQ-only raw packet QP where firmware returns SQ state 4. Doesn't
> that value alias MLX5_SQ_STATE_NA and land on sqrq_trans[NA][NA]?
>
> [MLX5_SQ_STATE_NA] = MLX5_QP_STATE_BAD,
>
> That entry reaches WARN(1, "Buggy Raw Packet QP state, ...") through
> ib_query_qp()->mlx5_ib_query_qp()->query_raw_packet_qp_state(). A legal
> SQ value on that QP always maps to MLX5_QP_STATE. The RQ-only case with
> RQ state 4 behaves the same way.
>
> Value 2 indexes a row or column that is never initialized, so it reads
> as 0, which is IB_QPS_RESET. Would ib_query_qp() then report RESET with
> no error and no WARN? On an SQ-only QP, any legal value would have
> returned qp->state.
>
> On a panic_on_warn system, a device-triggered WARN here becomes a panic.
>
> Would it close this gap to accept only the RST, RDY and ERR encodings,
> and only for the queues that were actually queried?
>
>>
>> if (*qp_state == MLX5_QP_STATE_BAD) {
>
No. This patch prevents the out of bounds read. The values left inside
the table can only give a wrong QP state or the existing WARN, which the
NIC can also reach with legal encodings, e.g. an RQ in RST with an SQ in
RDY.
Yishai
next prev parent reply other threads:[~2026-11-09 10:24 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 16:39 [PATCH rdma-next 00/23] mlx5: Adversarial mode for confidential computing guests Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 01/23] net/mlx5: Add mlx5_trigger_health_work_force() Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-08 16:17 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 02/23] net/mlx5: Derive adversarial mode from CC guest memory encryption Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-03 16:39 ` [PATCH rdma-next 03/23] net/mlx5: Add capability filtering in adversarial mode Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-09 8:27 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 04/23] net/mlx5: Add macros for reading log-based caps Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-03 16:39 ` [PATCH rdma-next 05/23] RDMA/mlx5: Reject QP transport types not enabled by FW capability Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-03 16:39 ` [PATCH rdma-next 06/23] RDMA/mlx5: Require IB_QPT_DRIVER for the DC vendor QP types Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-09 8:37 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 07/23] RDMA/mlx5: Derive mlx5_ib_adversarial_mode global from mlx5_core adversarial API Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-03 16:39 ` [PATCH rdma-next 08/23] RDMA/core: Suppress kverbs_provider for adversarial_mode devices Yishai Hadas
2026-11-03 19:03 ` Jacob Moroni
2026-11-03 19:07 ` Jason Gunthorpe
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-03 16:39 ` [PATCH rdma-next 09/23] RDMA/mlx5: Remove duplicate mlx5_ib_umr_context struct Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 10/23] RDMA/mlx5: Introduce per-CQ poll_one hook in mlx5_ib_cq Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-03 16:39 ` [PATCH rdma-next 11/23] RDMA/mlx5: Add shadow FIFO infrastructure for UMR completions Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-09 8:50 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 12/23] RDMA/mlx5: Verify UMR CQ polling against a hostile NIC Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-09 9:38 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 13/23] RDMA/mlx5: Keep the UMR QP failed once a forged CQE is detected Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-09 9:48 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 14/23] RDMA/mlx5: Block generic CQ poll path in adversarial mode Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-03 16:39 ` [PATCH rdma-next 15/23] RDMA/core: Set the CQ comp_handler after its poll context is set up Yishai Hadas
2026-11-07 20:24 ` netdev-bot+sashiko
2026-11-09 10:03 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 16/23] RDMA/mlx5: Ignore completion events for a CQ without a handler Yishai Hadas
2026-11-07 20:25 ` netdev-bot+sashiko
2026-11-09 10:09 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 17/23] RDMA/mlx5: Validate EQE port and GSI port before indexing devr.ports[] Yishai Hadas
2026-11-07 20:25 ` netdev-bot+sashiko
2026-11-09 10:18 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 18/23] RDMA/mlx5: Validate firmware RQ/SQ state before sqrq_trans[] lookup Yishai Hadas
2026-11-07 20:25 ` netdev-bot+sashiko
2026-11-09 10:24 ` Yishai Hadas [this message]
2026-11-03 16:39 ` [PATCH rdma-next 19/23] RDMA/mlx5: Clamp log_max_cq_sz shift in CQ size checks Yishai Hadas
2026-11-07 20:25 ` netdev-bot+sashiko
2026-11-09 10:27 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 20/23] RDMA/mlx5: Clamp log_max_* shifts in QP and WQ limit checks Yishai Hadas
2026-11-07 20:25 ` netdev-bot+sashiko
2026-11-09 10:30 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 21/23] RDMA/mlx5: Clamp log_max_* shifts in query_device and ucontext paths Yishai Hadas
2026-11-07 20:25 ` netdev-bot+sashiko
2026-11-09 10:44 ` Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 22/23] RDMA/core: Report and enforce adversarial mode via GET_CONTEXT Yishai Hadas
2026-11-03 16:39 ` [PATCH rdma-next 23/23] RDMA/mlx5: Advertise adversarial mode via ib_device::adversarial_mode Yishai Hadas
2026-11-07 20:25 ` netdev-bot+sashiko
2026-11-09 10:52 ` Yishai Hadas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a1abb4d5-022b-4ba7-b4f6-56ea4e7fdce2@nvidia.com \
--to=yishaih@nvidia.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=dtatulea@nvidia.com \
--cc=edumazet@kernel.org \
--cc=jgg@ziepe.ca \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=maorg@nvidia.com \
--cc=mbloch@nvidia.com \
--cc=moshe@nvidia.com \
--cc=netdev-bot+sashiko@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=saeedm@nvidia.com \
--cc=tariqt@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox