All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Xu Yilun" <yilun.xu@linux.intel.com>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH v2 04/17] x86/virt/tdx: Add extra memory to TDX module for the extensions
Date: Thu, 18 Jun 2026 08:54:58 +0000	[thread overview]
Message-ID: <20260618085458.8787A1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260618081355.3253581-5-yilun.xu@linux.intel.com>

Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [High] Hardware PFN mismatch due to unaligned slab allocation for `hpa_list` with debugging enabled.
- [Medium] Resource leak of un-added contiguous host memory on TDX module error path.
- [Medium] Improper use of node_online_map instead of N_MEMORY node states for allocation.
- [Low] Unnecessary early boot memory allocation error handling returning -ENOMEM.
--

commit e910725d57b782da4b05f3bb30b4df0fa4da1da3
Author: Xu Yilun <yilun.xu@linux.intel.com>

x86/virt/tdx: Add extra memory to TDX module for the extensions

This patch introduces a memory feeding process via SEAMCALL TDH.EXT.MEM.ADD
to allocate one-time memory for TDX module extensions during initialization.
It allocates contiguous memory and passes it to the module using a newly
defined HPA_LIST_INFO format.

> diff --git a/arch/x86/virt/vmx/tdx/tdx.c b/arch/x86/virt/vmx/tdx/tdx.c
> index 6f3596f11d250..dab17822c1c69 100644
> --- a/arch/x86/virt/vmx/tdx/tdx.c
> +++ b/arch/x86/virt/vmx/tdx/tdx.c

[ ... ]

> +static __init int tdx_ext_mem_setup(unsigned int required_pages)
> +{
> +	struct tdx_hpa_list *hpa_list;
> +	struct page *page;
> +	unsigned int i;
> +	int ret;
> +
> +	/*
> +	 * memory_pool_required_pages == 0 means no need to add pages,
> +	 * skip the memory setup.
> +	 */
> +	if (!required_pages)
> +		return 0;
> +
> +	hpa_list = kzalloc_obj(*hpa_list);

[Severity: High]
Does this code pass unaligned physical pages to the hardware if slab
debugging is enabled?

When CONFIG_SLUB_DEBUG or KASAN is enabled, slab objects are padded with
metadata, causing the object to start at a non-zero offset within a physical
page. The virt_to_page(hpa_list) call below will grab the base page frame
which the hardware will read from offset 0, leading it to consume SLUB
metadata instead of the valid hpa_list entries.

Should this allocation use the page allocator directly (e.g.,
__get_free_page()) to guarantee strict page alignment?

> +	if (!hpa_list)
> +		return -ENOMEM;
> +
> +	page = alloc_contig_pages(required_pages, GFP_KERNEL, numa_mem_id(),
> +				  &node_online_map);

[Severity: Medium]
Can this allocation fall back to memoryless nodes?

The node_online_map can include nodes without memory. The mm allocation
guidelines require using the N_MEMORY state mask (e.g., node_states[N_MEMORY])
to correctly constrain memory allocations to nodes that actually have memory.

> +	if (!page) {
> +		ret = -ENOMEM;

[Severity: Low]
Is this complex error handling necessary here?

Since tdx_ext_mem_setup() is only called from the __init path, physical memory
should be available. If an allocation of this size fails during early boot,
the system likely cannot boot anyway, making graceful error cleanup here
largely dead code.

> +		goto out_free_hpa_list;
> +	}
> +
> +	i = 0;
> +	while (i < required_pages) {
> +		unsigned int nents = min(required_pages - i,
> +					 ARRAY_SIZE(hpa_list->phys));
> +		unsigned int j;
> +
> +		for (j = 0; j < nents; j++)
> +			hpa_list->phys[j] = page_to_phys(page + i + j);
> +
> +		ret = tdx_ext_mem_add(virt_to_page(hpa_list), nents);
> +		/*
> +		 * No SEAMCALLs to reclaim the added pages. For simple error
> +		 * handling, leak all pages.
> +		 */
> +		WARN(ret, "Fatal: TDX module rejected (%d) memory for extensions, stranded all pages\n",
> +		     ret);
> +		if (ret)
> +			break;

[Severity: Medium]
Does this intentionally leak un-added host memory on the error path?

While pages that have already been accepted by the hardware cannot be
reclaimed, the remaining contiguous block of pages (from page + i to the end)
are still entirely host-owned. Could these remaining un-added pages be safely
freed via free_contig_range() instead of permanently leaking tens of megabytes?

> +
> +		i += nents;
> +	}

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260618081355.3253581-1-yilun.xu@linux.intel.com?part=4

  reply	other threads:[~2026-06-18  8:54 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-18  8:13 [PATCH v2 00/17] Enable DICE-based TDX Quoting Extension Xu Yilun
2026-06-18  8:13 ` [PATCH v2 01/17] x86/virt/tdx: Embed version info in SEAMCALL leaf function definitions Xu Yilun
2026-06-18 14:45   ` Dave Hansen
2026-06-18  8:13 ` [PATCH v2 02/17] x86/virt/tdx: Configure add-on features on TDX module init and update Xu Yilun
2026-06-18  8:13 ` [PATCH v2 03/17] x86/virt/tdx: Detect if the extensions initialization is required Xu Yilun
2026-06-18  8:13 ` [PATCH v2 04/17] x86/virt/tdx: Add extra memory to TDX module for the extensions Xu Yilun
2026-06-18  8:54   ` sashiko-bot [this message]
2026-06-18  8:13 ` [PATCH v2 05/17] x86/virt/tdx: Make TDX module initialize " Xu Yilun
2026-06-18  8:54   ` sashiko-bot
2026-06-18  8:13 ` [PATCH v2 06/17] x86/virt/tdx: Re-initialize the extensions on runtime TDX module update Xu Yilun
2026-06-18  8:58   ` sashiko-bot
2026-06-18  8:13 ` [PATCH v2 07/17] x86/virt/tdx: Initialize Quoting extension Xu Yilun
2026-06-18  8:50   ` sashiko-bot
2026-06-18  8:13 ` [PATCH v2 08/17] x86/virt/tdx: Prepare Quote buffer during extension bringup Xu Yilun
2026-06-18  8:13 ` [PATCH v2 09/17] x86/virt/tdx: Add interface to check Quoting availability Xu Yilun
2026-06-18  8:13 ` [PATCH v2 10/17] x86/virt/tdx: Move tdx_tdr_pa() up in the file Xu Yilun
2026-06-18  8:13 ` [PATCH v2 11/17] x86/virt/tdx: Add interface to generate a Quote Xu Yilun
2026-06-18  8:49   ` sashiko-bot
2026-06-18  8:13 ` [PATCH v2 12/17] x86/virt/tdx: Reinitialize the Quoting extension after TDX module update Xu Yilun
2026-06-18  8:13 ` [PATCH v2 13/17] x86/virt/tdx: Enable Quoting extension Xu Yilun
2026-06-18  8:13 ` [PATCH v2 14/17] x86/tdx: Move and rename Quote request structure Xu Yilun
2026-06-18  8:13 ` [PATCH v2 15/17] KVM: TDX: Factor out userspace return path from tdx_get_quote() Xu Yilun
2026-06-18  8:13 ` [PATCH v2 16/17] KVM: TDX: Add in-kernel Quote generation Xu Yilun
2026-06-18  9:03   ` sashiko-bot
2026-06-18  8:13 ` [PATCH v2 17/17] KVM: TDX: Support event-notify interrupts only with userspace Quoting Xu Yilun

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=20260618085458.8787A1F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=yilun.xu@linux.intel.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 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.