Kernel KVM virtualization development
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Lisa Wang" <wyihan@google.com>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH v16 19/20] KVM: selftests: Add support for TDX ucalls, via TDVMCALL_REPORT_FATAL_ERROR
Date: Fri, 06 Nov 2026 00:02:19 +0000	[thread overview]
Message-ID: <sashiko-outbox-200422@kernel.org> (raw)
In-Reply-To: <20261105-tdx-selftests-v16-19-2024e8fa517a@google.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] kvm: selftests: ucall_arch_init() permanently overwrites global ucall_x86_ops
--

commit e57af1ee0994af97f6ae447fc9a5abebc0287e67
Author: Sean Christopherson <seanjc@google.com>

KVM: selftests: Add support for TDX ucalls, via TDVMCALL_REPORT_FATAL_ERROR

This patch adds TDX ucall support in KVM selftests by passing the ucall
payload address and a magic value via TDVMCALL_REPORT_FATAL_ERROR. When a
TDX VM is initialized in ucall_arch_init(), ucall_x86_ops is updated to
use the TDX ucall callbacks and synced to the guest.

> diff --git a/tools/testing/selftests/kvm/lib/x86/ucall.c b/tools/testing/selftests/kvm/lib/x86/ucall.c
> index 3aec4dd46d1b2..2a1c61785e5fb 100644
> --- a/tools/testing/selftests/kvm/lib/x86/ucall.c
> +++ b/tools/testing/selftests/kvm/lib/x86/ucall.c

[ ... ]

> @@ -37,6 +61,11 @@ static struct {
>  
>  void ucall_arch_init(struct kvm_vm *vm, gpa_t mmio_gpa)
>  {
> +	if (is_tdx_vm(vm)) {
> +		ucall_x86_ops.do_ucall = ucall_tdx_do_ucall;
> +		ucall_x86_ops.get_ucall = ucall_tdx_get_ucall;
> +	}
> +
>  	sync_global_to_guest(vm, ucall_x86_ops);
>  }

[Severity: Medium]
As reported by Sashiko on v15 [1], since ucall_x86_ops is a process-wide
global structure in tools/testing/selftests/kvm/lib/x86/ucall.c:

static struct {
	void (*do_ucall)(gva_t uc);
	void *(*get_ucall)(struct kvm_vcpu *vcpu);
} ucall_x86_ops = {
	.do_ucall = ucall_x86_do_ucall,
	.get_ucall = ucall_x86_get_ucall,
};

does overwriting ucall_x86_ops in ucall_arch_init() when is_tdx_vm(vm) is
true without restoring the default handlers when !is_tdx_vm(vm) break tests
that create a non-TDX VM after a TDX VM (or run both concurrently) in the
same process?

If a non-TDX VM is initialized after a TDX VM via ucall_init() ->
ucall_arch_init(), sync_global_to_guest(vm, ucall_x86_ops) will copy
ucall_tdx_do_ucall into the non-TDX guest, causing the guest to execute
TDCALL and fault with #UD on its first ucall.

Similarly, on the host side, ucall_arch_get_ucall() dispatches through the
single global ucall_x86_ops.get_ucall pointer:

void *ucall_arch_get_ucall(struct kvm_vcpu *vcpu)
{
	return ucall_x86_ops.get_ucall(vcpu);
}

so get_ucall() -> ucall_arch_get_ucall() will check for
KVM_SYSTEM_EVENT_TDX_FATAL instead of KVM_EXIT_IO for any non-TDX VM once a
TDX VM has been initialized. Should ucall_arch_init() restore the default x86
callbacks when !is_tdx_vm(vm) (or should ucall_arch_get_ucall() dispatch
based on is_tdx_vm(vcpu->vm))?

[1] https://lore.kernel.org/r/20261002091337.9BDF91F0089A@smtp.kernel.org

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261105-tdx-selftests-v16-0-2024e8fa517a@google.com?part=19

  reply	other threads:[~2026-11-06  0:02 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-05 23:46 [PATCH v16 00/20] TDX KVM selftests Lisa Wang
2026-11-05 23:46 ` [PATCH v16 01/20] KVM: selftests: Add macros to simplify creating VM shapes for non-default types Lisa Wang
2026-11-05 23:46 ` [PATCH v16 02/20] KVM: selftests: Update kvm_init_vm_address_properties() for TDX Lisa Wang
2026-11-05 23:46 ` [PATCH v16 03/20] KVM: selftests: Initialize the TDX VM Lisa Wang
2026-11-05 23:46 ` [PATCH v16 04/20] KVM: selftests: Expose segment definitions to assembly files Lisa Wang
2026-11-05 23:46 ` [PATCH v16 05/20] tools: include: Add kbuild.h for assembly structure offsets Lisa Wang
2026-11-05 23:46 ` [PATCH v16 06/20] KVM: selftests: Introduce structures for TDX guest boot parameters Lisa Wang
2026-11-05 23:46 ` [PATCH v16 07/20] KVM: selftests: Add TDX boot code Lisa Wang
2026-11-05 23:46 ` [PATCH v16 08/20] KVM: selftests: Expose functions to get default sregs values Lisa Wang
2026-11-05 23:46 ` [PATCH v16 09/20] KVM: selftests: Set up TDX boot code region Lisa Wang
2026-11-05 23:46 ` [PATCH v16 10/20] KVM: selftests: Set up TDX boot parameters region Lisa Wang
2026-11-05 23:46 ` [PATCH v16 11/20] KVM: selftests: Require guest_memfd for TDX VMs Lisa Wang
2026-11-05 23:46 ` [PATCH v16 12/20] KVM: selftests: Call KVM_TDX_INIT_VCPU when creating a new TDX vcpu Lisa Wang
2026-11-05 23:46 ` [PATCH v16 13/20] KVM: selftests: Load per-vCPU guest stack in TDX boot parameters Lisa Wang
2026-11-05 23:46 ` [PATCH v16 14/20] KVM: selftests: Set entry point for TDX guest code Lisa Wang
2026-11-05 23:46 ` [PATCH v16 15/20] KVM: selftests: Add helpers to init TDX memory and finalize VM Lisa Wang
2026-11-05 23:47 ` [PATCH v16 16/20] KVM: selftests: Load private memory and finalize TDX VM in kvm_arch_vm_finalize_vcpus() Lisa Wang
2026-11-05 23:47 ` [PATCH v16 17/20] KVM: selftests: Add a helper to issue TDVMCALLs from the TDX vm Lisa Wang
2026-11-05 23:47 ` [PATCH v16 18/20] KVM: selftests: Add support for per-VM ucall ops on x86 Lisa Wang
2026-11-06  0:02   ` sashiko-bot
2026-11-06 14:52     ` Sean Christopherson
2026-11-06 16:47   ` [PATCH v16.1] KVM: selftests: Add support for TDX ucalls, via TDVMCALL_REPORT_FATAL_ERROR Sean Christopherson
2026-11-05 23:47 ` [PATCH v16 19/20] " Lisa Wang
2026-11-06  0:02   ` sashiko-bot [this message]
2026-11-05 23:47 ` [PATCH v16 20/20] KVM: selftests: Add TDX lifecycle test Lisa 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=sashiko-outbox-200422@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=wyihan@google.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