All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhu Yanjun <yanjun.zhu@linux.dev>
To: Nicolas Morey <nmorey@suse.com>,
	Zhu Yanjun <zyjzyj2000@gmail.com>, Jason Gunthorpe <jgg@ziepe.ca>,
	Leon Romanovsky <leon@kernel.org>,
	Tristan Madani <tristmd@gmail.com>,
	"open list:SOFT-ROCE DRIVER (rxe)" <linux-rdma@vger.kernel.org>,
	open list <linux-kernel@vger.kernel.org>,
	"yanjun.zhu@linux.dev" <yanjun.zhu@linux.dev>
Subject: Re: [PATCH] RDMA/rxe: Use validated num_sge in local buffer
Date: Mon, 7 Sep 2026 14:20:26 -0700	[thread overview]
Message-ID: <27376486-9cab-4d42-8ed7-36e13231dd91@linux.dev> (raw)
In-Reply-To: <20260907161550.716670-1-nmorey@suse.com>

在 2026/9/7 9:15, Nicolas Morey 写道:
> For both SRQ and non-SRQ receive paths, the WQE is copied into a local
> buffer to provide a kernel-owned, validated copy. While calculating the
> memcpy size from the validated num_sge prevents overflow during the
> copy, memcpy() itself still copies num_sge from shared memory.
> 
> A concurrent userspace modification before or during memcpy() leaves
> an unvalidated num_sge in the local buffer, leading to potential
> out-of-bounds reads in rxe_resp_check_length() and copy_data().
> 

Hi Nicolas,

Thanks for the patch. The logic makes total sense to prevent the TOCTOU 
race condition after memcpy.

Just out of curiosity, do you happen to have a reproducer or a POC 
script that demonstrates this race in practice?

It would be great to know if this can be reliably reproduced or 
integrated into testing setups (like rdma-core tests, or 
tools/testing/selftests/rdma) to catch similar double-read issues in the 
future.

Thanks a lot for your effort.

Zhu Yanjun

> Explicitly assign the validated num_sge to the local buffer after the
> copy to prevent this race.
> 
> Fixes: 22b8fbded65b ("RDMA/rxe: Fix TOCTOU heap overflow in get_srq_wqe")
> Fixes: d6ab440240a0 ("RDMA/rxe: Copy WQE to local buffer in non-SRQ receive path")
> Signed-off-by: Nicolas Morey <nmorey@suse.com>
> ---
>   drivers/infiniband/sw/rxe/rxe_resp.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
> index 02b16e2b49b8..cd51042857d6 100644
> --- a/drivers/infiniband/sw/rxe/rxe_resp.c
> +++ b/drivers/infiniband/sw/rxe/rxe_resp.c
> @@ -288,6 +288,7 @@ static enum resp_states get_srq_wqe(struct rxe_qp *qp)
>   	}
>   	size = sizeof(*wqe) + num_sge * sizeof(struct rxe_sge);
>   	memcpy(&qp->resp.srq_wqe, wqe, size);
> +	qp->resp.srq_wqe.wqe.dma.num_sge = num_sge;
>   
>   	qp->resp.wqe = &qp->resp.srq_wqe.wqe;
>   	queue_advance_consumer(q, QUEUE_TYPE_FROM_CLIENT);
> @@ -328,6 +329,7 @@ static enum resp_states rxe_get_recv_wqe(struct rxe_qp *qp)
>   	}
>   	size = sizeof(*wqe) + num_sge * sizeof(struct rxe_sge);
>   	memcpy(&qp->resp.srq_wqe, wqe, size);
> +	qp->resp.srq_wqe.wqe.dma.num_sge = num_sge;
>   
>   	qp->resp.wqe = &qp->resp.srq_wqe.wqe;
>   	return RESPST_CHK_LENGTH;


  reply	other threads:[~2026-09-07 21:20 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-07 16:15 [PATCH] RDMA/rxe: Use validated num_sge in local buffer Nicolas Morey
2026-09-07 21:20 ` Zhu Yanjun [this message]
2026-09-07 21:44   ` Nicolas Morey
2026-09-08  3:07     ` Zhu Yanjun
2026-09-08  7:35       ` Nicolas Morey
2026-09-09 14:15         ` Zhu Yanjun

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=27376486-9cab-4d42-8ed7-36e13231dd91@linux.dev \
    --to=yanjun.zhu@linux.dev \
    --cc=jgg@ziepe.ca \
    --cc=leon@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=nmorey@suse.com \
    --cc=tristmd@gmail.com \
    --cc=zyjzyj2000@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.