diff options
| author | Youngsung Ahn <ays511.kr@gmail.com> | 2026-10-02 00:24:26 +0900 |
|---|---|---|
| committer | Leon Romanovsky <leon@kernel.org> | 2026-10-15 09:55:50 -0400 |
| commit | 33afe9909f213d8bb8e80f0b93382dde0f56e2c7 (patch) | |
| tree | 73b5e74f2becaf1e196fc4f88934275b7e883cc7 /tools/lib/python/kdoc/python_version.py | |
| parent | 9e61a2ac6590e9c42d2eeef687749781334b300f (diff) | |
RDMA/rxe: reject IB_WR_REG_MR from user QPs in rxe_reg_fast_mr()
IB_WR_REG_MR is documented as kernel-only ("can not be issued by
userspace"), but nothing enforces it.
rxe_wr_opcode_info[IB_WR_REG_MR] sets WR_LOCAL_OP_MASK for IB_QPT_RC,
a QP type userspace can create, so a user QP that writes
opcode = IB_WR_REG_MR into its mmap'd SQ ring reaches
rxe_do_local_ops() -> rxe_reg_fast_mr(). That function then trusts
the ring-supplied fields:
struct rxe_mr *mr = to_rmr(wqe->wr.wr.reg.mr);
...
if (unlikely(mr->state != RXE_MR_STATE_FREE)) /* deref */
...
mr->access = access; /* write */
For a user QP wqe->wr.wr.reg.mr is a fully attacker-chosen pointer,
so this is an arbitrary-kernel-address dereference (arbitrary read
confirmed, oops). No existing check distinguishes a user QP on this
path.
Reject IB_WR_REG_MR for user QPs before dereferencing the supplied
pointer.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Youngsung Ahn <ays511.kr@gmail.com>
Link: https://patch.msgid.link/20261001152426.3259522-1-ays511.kr@gmail.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Diffstat (limited to 'tools/lib/python/kdoc/python_version.py')
0 files changed, 0 insertions, 0 deletions
