From: Stanley Jhu <stanleyjhu@google.com>
To: jenswi@kernel.org, mkp@kernel.org
Cc: gregkh@linuxfoundation.org, arnd@arndb.de, bvanassche@acm.org,
avri.altman@sandisk.com, alim.akhtar@samsung.com,
beanhuo@micron.com, can.guo@oss.qualcomm.com, ulfh@kernel.org,
linusw@kernel.org, tomas.winkler@intel.com,
shyamsaini@linux.microsoft.com, alex.bennee@linaro.org,
James.Bottomley@HansenPartnership.com,
linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org,
Stanley Jhu <stanleyjhu@google.com>
Subject: [PATCH v4 0/3] rpmb: Fix request serialisation and teardown races
Date: Sun, 13 Sep 2026 11:36:30 +0800 [thread overview]
Message-ID: <20260913033633.3159296-1-stanleyjhu@google.com> (raw)
This merges two series that were both last posted as v3:
[PATCH v3] rpmb: core: Guard frame requests and teardown with mutex
https://lore.kernel.org/all/20260910015515.1991789-1-stanleyjhu@google.com/
[PATCH v3 0/2] scsi: ufs: rpmb: Fix bus registration and device lifecycle
https://lore.kernel.org/all/20260910015503.1991119-1-stanleyjhu@google.com/
They turned out to be one problem. The UFS patches make RPMB registration
succeed for the first time, and registering RPMB devices without the core
fix triggers a use-after-free on any unbind that races an in-flight
request. Landing them as two independent series would leave that window
open in between.
The order is chosen so that no commit enables RPMB registration before the
lifetime handling and the serialisation are in place:
1/3 fixes the generic core. It fixes the teardown race on eMMC today
and carries a stable tag. It has no effect on UFS, where nothing
registers yet.
2/3 fixes the UFS device lifetime. Still nothing registers.
3/3 removes the never registered bus, which is what finally makes UFS
RPMB devices appear.
drivers/misc/rpmb-core.c and drivers/ufs/ are not in the same tree. 1/3
has no build or runtime dependency on the other two and can be taken on
its own; 2/3 and 3/3 must not land before it.
Verified on QEMU arm64 with KASAN, PROVE_LOCKING and SLUB_DEBUG_ON, against
a UFS device advertising four 4 MiB RPMB regions. Two kthreads on different
CPUs issue RPMB_GET_WRITE_COUNTER against the same region 20000 times each
and compare the nonce echoed back; a third thread holds an rpmb_dev
reference and keeps issuing requests across a host unbind. OP-TEE is the
only in-kernel consumer of rpmb_route_frames(), so an out-of-tree module
stands in for it.
tree rpmb_dev stolen responses unbind
-------------------- -------- ---------------- --------------------
3/3 alone 4 16512 of 40000 KASAN use-after-free
3/3 and 2/3, no 1/3 4 17030 of 40000 KASAN use-after-free
all three 4 0 of 40000 clean
The intermediate points were booted and unbound as well. After 1/3 and
after 2/3 no rpmb_dev is registered, so neither test applies to them, and
neither point reports KASAN.
Upstream QEMU answers SECURITY PROTOCOL IN/OUT on the RPMB well known LU
with INVALID OPCODE, so the three rows above also needed a local QEMU
change that implements the authenticated frame state machine. I can post
that to qemu-devel separately, and send the test module to anyone who
wants to reproduce the numbers.
Changes since v3:
- merged the two series and reordered so registration is enabled last
- dropped the incorrect Tested: line from the core patch
- dropped Cc: stable from the UFS patches; the feature has never worked on
any released kernel, so there is nothing to back port
- rewrote the commit messages around the measured results
Stanley Jhu (3):
rpmb: core: Guard frame requests and teardown with mutex
scsi: ufs: rpmb: Decouple device lifecycle from devres to avoid UAF
scsi: ufs: rpmb: Drop the unregistered ufs_rpmb bus
drivers/misc/rpmb-core.c | 34 ++++++++++--
drivers/ufs/core/ufs-rpmb.c | 102 +++++++++++++++++++-----------------
include/linux/rpmb.h | 6 +++
3 files changed, 90 insertions(+), 52 deletions(-)
--
2.55.0.1007.g17ff1f9808-goog
next reply other threads:[~2026-09-13 3:36 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-13 3:36 Stanley Jhu [this message]
2026-09-13 3:36 ` [PATCH v4 1/3] rpmb: core: Guard frame requests and teardown with mutex Stanley Jhu
2026-09-13 17:43 ` Bean Huo
2026-09-13 3:36 ` [PATCH v4 2/3] scsi: ufs: rpmb: Decouple device lifecycle from devres to avoid UAF Stanley Jhu
2026-09-13 3:47 ` sashiko-bot
2026-09-13 5:07 ` Stanley Jhu
2026-09-13 3:36 ` [PATCH v4 3/3] scsi: ufs: rpmb: Drop the unregistered ufs_rpmb bus Stanley Jhu
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=20260913033633.3159296-1-stanleyjhu@google.com \
--to=stanleyjhu@google.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=alex.bennee@linaro.org \
--cc=alim.akhtar@samsung.com \
--cc=arnd@arndb.de \
--cc=avri.altman@sandisk.com \
--cc=beanhuo@micron.com \
--cc=bvanassche@acm.org \
--cc=can.guo@oss.qualcomm.com \
--cc=gregkh@linuxfoundation.org \
--cc=jenswi@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=mkp@kernel.org \
--cc=shyamsaini@linux.microsoft.com \
--cc=tomas.winkler@intel.com \
--cc=ulfh@kernel.org \
/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