Devicetree
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Ryan Roberts" <ryan.roberts@arm.com>
Cc: kvmarm@lists.linux.dev, kvm@vger.kernel.org,
	devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org,
	robh@kernel.org, conor+dt@kernel.org,
	"Oliver Upton" <oupton@kernel.org>,
	"Marc Zyngier" <maz@kernel.org>
Subject: Re: [RFC PATCH v2 13/15] misc/arm-cla: Add stage-2 MTC and VM context switch
Date: Thu, 15 Oct 2026 14:40:25 +0000	[thread overview]
Message-ID: <sashiko-outbox-172969@kernel.org> (raw)
In-Reply-To: <20261015142552.4128028-14-ryan.roberts@arm.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] kvm: use-after-free and refcount underflow in cla_ctx_create()
- [Medium] arm-cla: late validation of VHE mode breaks device domain
--

commit fd14d79171a8956e71dc07a1dfa6797aaef533a8
Author: Jean-Philippe Brucker <jpb@kernel.org>

misc/arm-cla: Add stage-2 MTC and VM context switch

Add functions to switch the guest MTC. Reset the accelerators and CLA
registers on switch. No save/restore of accelerators at the moment, we
only restore the kernel's PL0CTL.

> diff --git a/drivers/misc/arm-cla/cla-ctx.c b/drivers/misc/arm-cla/cla-ctx.c
> --- a/drivers/misc/arm-cla/cla-ctx.c
> +++ b/drivers/misc/arm-cla/cla-ctx.c
[ ... ]
> @@ -48,8 +79,12 @@ struct cla_ctx *cla_ctx_create(struct cla_domain *domain,
>  	INIT_LIST_HEAD(&ctx->queue_node);
>  	init_waitqueue_head(&ctx->waitq);
>  
> -	mmgrab(key->mm);
> -	get_file(key->file);
> +	if (cla_ctx_is_pl0(ctx)) {
> +		mmgrab(key->mm);
> +		get_file(key->file);
> +	} else {
> +		WARN_ON(!cla_ctx_get_pl1(ctx));
> +	}

[Severity: High]
If cla_ctx_get_pl1() fails and returns false (for example, if the KVM 
instance is dying and its refcount is zero), does execution continue here
with an unreferenced and potentially freed kvm pointer?

If so, this unreferenced pointer is later passed to cla_mtc_get_ctx() and
then cla_mtc_get_s2_ctx(), which calls kvm_arch_get_guest_mmu(). That
function dereferences the invalid pointer when acquiring the config_lock:

arch/arm64/kvm/mmu.c:kvm_arch_get_guest_mmu() {
        ...
        guard(mutex)(&kvm->arch.config_lock);
        ...
}

Could this lead to a use-after-free? Furthermore, if execution reaches the
err_free error path, cla_ctx_put_pl1() is called unconditionally, which
calls kvm_put_kvm() and could cause a refcount underflow. Should this path
return an error immediately if the KVM reference cannot be acquired?

> diff --git a/drivers/misc/arm-cla/cla-mtc.c b/drivers/misc/arm-cla/cla-mtc.c
> --- a/drivers/misc/arm-cla/cla-mtc.c
> +++ b/drivers/misc/arm-cla/cla-mtc.c
[ ... ]
> @@ -137,6 +205,49 @@ static int cla_mtc_uninstall_s1(struct cla_dev *dev)
>  	return cla_op_setctx(dev, cla_kernel_mtc + CLA_MTC_TTBR0, 1, &ttbr0);
>  }
>  
> +static int cla_mtc_install_s2(struct cla_dev *dev, struct cla_ctx *ctx)
> +{
> +	struct cla_mtc_s2 s2 = {};
> +	const size_t num_regs = sizeof(s2) / sizeof(u64);
> +
> +	if (WARN_ON(cla_kernel_pl != 2))
> +		return -EINVAL;

[Severity: Medium]
Because this validation occurs during the context switch path (called by
the scheduler), is it too late to gracefully reject an unsupported VM
configuration?

If this WARN_ON is hit after the PL1 context has already been created and
queued, returning an error during the context switch might cause the
hardware domain to be permanently marked as broken and leak resources.
Would it be safer to perform this capability check upfront during context
creation, for example in cla_mtc_get_s2_ctx()?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261015142552.4128028-1-ryan.roberts@arm.com?part=13

  reply	other threads:[~2026-10-15 14:40 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-15 14:25 [RFC PATCH v2 00/15] Arm Core Local Accelerator Driver Ryan Roberts
2026-10-15 14:25 ` [RFC PATCH v2 01/15] misc/arm-cla: Add driver skeleton and documentation Ryan Roberts
2026-10-15 14:35   ` sashiko-bot
2026-10-15 14:25 ` [RFC PATCH v2 02/15] misc/arm-cla: Add launch operation helpers Ryan Roberts
2026-10-15 14:42   ` sashiko-bot
2026-10-15 16:17   ` Greg Kroah-Hartman
2026-10-15 16:32     ` Ryan Roberts
2026-10-15 14:25 ` [RFC PATCH v2 03/15] dt-bindings: misc: Add Arm Core Local Accelerator Ryan Roberts
2026-10-15 14:25 ` [RFC PATCH v2 04/15] misc/arm-cla: Probe firmware-described devices Ryan Roberts
2026-10-15 14:37   ` sashiko-bot
2026-10-15 14:25 ` [RFC PATCH v2 05/15] misc/arm-cla: Initialize devices on CPU bringup Ryan Roberts
2026-10-15 14:25 ` [RFC PATCH v2 06/15] misc/arm-cla: Accelerator context save and restore Ryan Roberts
2026-10-15 14:41   ` sashiko-bot
2026-10-15 14:25 ` [RFC PATCH v2 07/15] misc/arm-cla: Set up memory translation context Ryan Roberts
2026-10-15 14:25 ` [RFC PATCH v2 08/15] misc/arm-cla: Manage domain contexts Ryan Roberts
2026-10-15 14:38   ` sashiko-bot
2026-10-15 14:25 ` [RFC PATCH v2 09/15] misc/arm-cla: Add userspace interface Ryan Roberts
2026-10-15 14:47   ` sashiko-bot
2026-10-15 14:25 ` [RFC PATCH v2 10/15] KVM: arm64: Introduce support to pin VMIDs Ryan Roberts
2026-10-15 14:38   ` sashiko-bot
2026-10-15 14:25 ` [RFC PATCH v2 11/15] KVM: arm64: Export stage-2 MMU config Ryan Roberts
2026-10-15 14:43   ` sashiko-bot
2026-10-15 14:25 ` [RFC PATCH v2 12/15] vfio: Support VFIO devices that access the CPU MMU Ryan Roberts
2026-10-15 14:44   ` sashiko-bot
2026-10-15 16:44   ` Jason Gunthorpe
2026-10-15 14:25 ` [RFC PATCH v2 13/15] misc/arm-cla: Add stage-2 MTC and VM context switch Ryan Roberts
2026-10-15 14:40   ` sashiko-bot [this message]
2026-10-15 14:25 ` [RFC PATCH v2 14/15] misc/arm-cla: Support exclusive context assignment Ryan Roberts
2026-10-15 14:41   ` sashiko-bot
2026-10-15 14:25 ` [RFC PATCH v2 15/15] misc/arm-cla: Add vfio-mdev user interface Ryan Roberts
2026-10-15 14:49   ` sashiko-bot
2026-10-15 16:41   ` Jason Gunthorpe

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=sashiko-outbox-172969@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=maz@kernel.org \
    --cc=oupton@kernel.org \
    --cc=robh@kernel.org \
    --cc=ryan.roberts@arm.com \
    --cc=sashiko-reviews@lists.linux.dev \
    /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