From: Lizhi Hou <lizhi.hou@amd.com>
To: Eva Crystal <0xiviel@gmail.com>, Min Ma <mamin506@gmail.com>
Cc: <dri-devel@lists.freedesktop.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 0/4] accel/amdxdna: harden command BO payload validation
Date: Mon, 14 Sep 2026 11:25:52 -0700 [thread overview]
Message-ID: <7e7c456d-fe38-caa4-0a82-cf4ebfafd72a@amd.com> (raw)
In-Reply-To: <20260912081012.2274075-1-0xiviel@gmail.com>
On 9/12/26 01:10, Eva Crystal wrote:
> These came out of a read of the command submission path in
> drivers/accel/amdxdna.
>
> Where to spend review attention: patch 3 is a real fix - a leaked GEM
> reference on an error path. Patches 1, 2 and 4 are hardening. I could
> not reach any of those three, and each commit message says so in as many
> words and explains what currently prevents it. I would rather be plain
> about that up front than have you read three messages looking for a bug
> that is not there.
>
> What the three have in common is that a check on user-controlled data is
> either skipped, or holds only because of a property established
> somewhere else - an allocator that page-aligns, vmap() refusing a
> zero-page mapping, or the integer promotion rules. Those properties hold
> today. They are not local to the code that depends on them, and two of
> the three sit next to siblings that already carry the explicit check.
I will run some tests against these three.
Thanks,
Lizhi
>
> Patch 1 makes amdxdna_cmd_get_payload()'s bounds check unconditional.
> It is currently inside "if (size)", so a caller passing NULL
> gets an unvalidated pointer into the command BO. The single
> NULL caller is safe because command BOs are always
> PAGE_ALIGN()ed. [hardening]
>
> Patch 2 gives the error-path memset()/memcpy() in
> amdxdna_cmd_set_error() a floor. The length is
> "abo->mem.size - sizeof(*cmd)" with no check that mem.size is
> at least 4. A zero-sized BO is creatable, but cannot be
> vmap()ed, so it is rejected a few lines earlier. [hardening]
>
> Patch 3 is an actual bug fix: the -ENOMEM path in
> amdxdna_cmd_set_error() returns without dropping the reference
> amdxdna_gem_get_obj() took on the chained command BO. Small
> leak on a rare path, but a leak. [fix]
>
> Patch 4 adds the explicit short-length and NULL tests to
> aie2_init_exec_dpu_req() and aie2_init_exec_cu_req(). The
> length test is currently performed by subtracting a size_t
> from a u32 and relying on the result being evaluated in
> 64-bit, so that a short command underflows to a value larger
> than the destination. The slot-filling siblings in the same
> file (aie2_cmdlist_fill_dpu() and friends) already have the
> explicit "cmd_len < sizeof(*sn)" test; these two do not.
> [hardening]
>
> No behavioural change is intended anywhere except patch 3. Every input
> the new tests reject is already rejected today.
>
> Based on v7.1.5. Compile-tested as an out-of-tree build against 7.1.5
> headers, no new warnings.
>
> Not runtime-tested, and I want to be explicit about that rather than
> leave it implied. I have the hardware - a Strix Point NPU, 1022:17f0,
> running npu_7.sbin 1.1.2.64 - and I am happy to run whatever you would
> like on it and report back. I did not want to send results I had not
> actually produced.
>
> I have deliberately not added Fixes: tags. I worked from release
> tarballs rather than a git tree and could not verify the introducing
> commits; someone with the history should add them if these are taken.
>
> Eva Crystal (4):
> accel/amdxdna: validate the command payload regardless of the size argument
> accel/amdxdna: bound the command error payload length
> accel/amdxdna: release the chained command BO when vmap fails
> accel/amdxdna: check the command payload before using it in the exec requests
>
> drivers/accel/amdxdna/aie2_message.c | 5 +++--
> drivers/accel/amdxdna/amdxdna_ctx.c | 39 ++++++++++++++++++++++----------
> 2 files changed, 30 insertions(+), 14 deletions(-)
>
prev parent reply other threads:[~2026-09-14 18:25 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-12 8:10 Eva Crystal
2026-09-12 8:10 ` [PATCH 1/4] accel/amdxdna: validate the command payload regardless of the size argument Eva Crystal
2026-09-12 8:10 ` [PATCH 2/4] accel/amdxdna: bound the command error payload length Eva Crystal
2026-09-12 8:10 ` [PATCH 3/4] accel/amdxdna: release the chained command BO when vmap fails Eva Crystal
2026-09-14 17:37 ` Lizhi Hou
2026-09-12 8:10 ` [PATCH 4/4] accel/amdxdna: check the command payload before using it in the exec requests Eva Crystal
2026-09-14 18:25 ` Lizhi Hou [this message]
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=7e7c456d-fe38-caa4-0a82-cf4ebfafd72a@amd.com \
--to=lizhi.hou@amd.com \
--cc=0xiviel@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mamin506@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®