All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Wentao Liang" <vulab@iscas.ac.cn>
Cc: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915/gvt: Fix mm reference leak in handle_g2v_notification()
Date: Wed, 16 Sep 2026 18:04:06 +0000	[thread overview]
Message-ID: <20260916180406.D86C91F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260916173720.2088455-1-vulab@iscas.ac.cn>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Critical] drm/i915/gvt: UAF and Double Free in PPGTT mm object lifecycle
--

commit 01f0e076eca16f11c93a812eb503401ad6e94137
Author: Wentao Liang <vulab@iscas.ac.cn>

drm/i915/gvt: Fix mm reference leak in handle_g2v_notification()

This commit changes the PPGTT page table create path to avoid taking an extra
reference for an already registered mm. It uses intel_vgpu_find_ppgtt_mm() to
check if the mm exists and skips creation if it is already tracked.

> diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
> index 22dd0179863ee..6b967da3a8836 100644
> --- a/drivers/gpu/drm/i915/gvt/handlers.c
> +++ b/drivers/gpu/drm/i915/gvt/handlers.c
> @@ -1505,7 +1505,17 @@ static int handle_g2v_notification(struct intel_vgpu *vgpu, int notification)
>  		root_entry_type = GTT_TYPE_PPGTT_ROOT_L3_ENTRY;
>  		fallthrough;
>  	case VGT_G2V_PPGTT_L4_PAGE_TABLE_CREATE:
> -		mm = intel_vgpu_get_ppgtt_mm(vgpu, root_entry_type, pdps);
> +		/*
> +		 * A newly created mm keeps its initial reference as the
> +		 * registration reference, dropped by the DESTROY
> +		 * notification. A duplicate CREATE for an already tracked
> +		 * mm must not take an extra reference that nothing drops.
> +		 */
> +		mm = intel_vgpu_find_ppgtt_mm(vgpu, pdps);
> +		if (mm)
> +			return 0;

[Severity: Critical]
Can this logic lead to a use-after-free and double free if a guest issues a
duplicate CREATE after a DESTROY while a workload is still active?

If a guest VM performs the following sequence:
1. Issues a CREATE notification (refcount=1).
2. Submits Workload A using the page table (refcount=2).
3. Issues a DESTROY notification (refcount drops to 1, object remains due to
   Workload A).
4. Issues another CREATE for the same page table.

Here, intel_vgpu_find_ppgtt_mm() finds the object and returns 0, but no
registration reference is taken, leaving the refcount at 1.

If the guest then submits Workload B (refcount=2), and Workload A finishes
(refcount=1), a subsequent DESTROY from the guest will drop the refcount to 0:

drivers/gpu/drm/i915/gvt/gtt.c:intel_vgpu_put_ppgtt_mm() {
    ...
    intel_vgpu_mm_put(mm);
    ...
}

This frees the object while Workload B is still active.

Once Workload B finishes, the cleanup path accesses the prematurely freed
shadow_mm and attempts to drop its reference again:

drivers/gpu/drm/i915/gvt/scheduler.c:intel_vgpu_destroy_workload() {
    ...
    if (workload->shadow_mm)
        intel_vgpu_mm_put(workload->shadow_mm);
    ...
}

Does this new condition need to take a registration reference when the mm is
found, to prevent it from being freed prematurely?

> +
> +		mm = intel_vgpu_create_ppgtt_mm(vgpu, root_entry_type, pdps);
>  		return PTR_ERR_OR_ZERO(mm);

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260916173720.2088455-1-vulab@iscas.ac.cn?part=1

  reply	other threads:[~2026-09-16 18:04 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-16 17:37 [PATCH] drm/i915/gvt: Fix mm reference leak in handle_g2v_notification() Wentao Liang
2026-09-16 18:04 ` sashiko-bot [this message]
2026-09-18  0:59 ` ✗ LGCI.VerificationFailed: failure for " Patchwork
2026-09-23 21:16 ` ✓ i915.CI.BAT: success for drm/i915/gvt: Fix mm reference leak in handle_g2v_notification() (rev3) Patchwork
2026-09-24 19:05 ` ✓ i915.CI.Full: " Patchwork
2026-09-25  5:28 ` [PATCH] drm/i915/gvt: Fix mm reference leak in handle_g2v_notification() Zhenyu Wang

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=20260916180406.D86C91F000FF@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=vulab@iscas.ac.cn \
    /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.