* [PATCH 0/2] KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0
@ 2026-08-29 5:48 Karl Mehltretter
2026-08-29 5:48 ` [PATCH 1/2] " Karl Mehltretter
2026-08-29 5:48 ` [PATCH 2/2] KVM: arm64: selftests: Test " Karl Mehltretter
0 siblings, 2 replies; 7+ messages in thread
From: Karl Mehltretter @ 2026-08-29 5:48 UTC (permalink / raw)
To: Marc Zyngier, Oliver Upton, kvmarm
Cc: Karl Mehltretter, Fuad Tabba, Joey Gouly, Steffen Eiden,
Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon,
Mark Rutland, Paolo Bonzini, Sean Christopherson, Shuah Khan,
linux-arm-kernel, linux-kernel, kvm, linux-kselftest
KVM_ARM_VM_SMCCC_FILTER rejects an empty range (nr_functions == 0) with
-EINVAL for every base except 0. kvm_smccc_set_filter() only rejects a
range if its inclusive end, base + nr_functions - 1, is below base; for
base 0 that end wraps to U32_MAX, and KVM then tries to insert
[0, U32_MAX], which overlaps the reserved Arm Architecture Calls
ranges, so the attribute returns -EEXIST instead of -EINVAL.
The request is rejected either way; only the errno is wrong, so this is
a minor UAPI validation fix.
Patch 1 rejects a zero function count explicitly. Patch 2 adds the base
0 case to test_invalid_nr_functions(), which only covered a nonzero base
and therefore never caught this.
Tested on an arm64 KVM host in VHE mode running under QEMU TCG: a small
userspace reproducer gets EEXIST before patch 1 and EINVAL after it, and
the smccc_filter selftest including the new assertion passes with patch 1
applied and fails at the new assertion with EEXIST without it.
Karl Mehltretter (2):
KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0
KVM: arm64: selftests: Test empty SMCCC filter range at base 0
arch/arm64/kvm/hypercalls.c | 3 ++-
tools/testing/selftests/kvm/arm64/smccc_filter.c | 4 ++++
2 files changed, 6 insertions(+), 1 deletion(-)
base-commit: 548e7bcd0c5460ddcbca9600cea603ebeebf4da7
--
2.39.5 (Apple Git-154)
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0
2026-08-29 5:48 [PATCH 0/2] KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0 Karl Mehltretter
@ 2026-08-29 5:48 ` Karl Mehltretter
2026-08-29 15:04 ` Fuad Tabba
2026-08-29 5:48 ` [PATCH 2/2] KVM: arm64: selftests: Test " Karl Mehltretter
1 sibling, 1 reply; 7+ messages in thread
From: Karl Mehltretter @ 2026-08-29 5:48 UTC (permalink / raw)
To: Marc Zyngier, Oliver Upton, kvmarm
Cc: Karl Mehltretter, Fuad Tabba, Joey Gouly, Steffen Eiden,
Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon,
Mark Rutland, Paolo Bonzini, Sean Christopherson, Shuah Khan,
linux-arm-kernel, linux-kernel, kvm, linux-kselftest
kvm_smccc_set_filter() only rejects a range if its inclusive end,
base + nr_functions - 1, is below base. That catches an empty range
(nr_functions == 0) at every nonzero base, but at base 0 the end wraps
to U32_MAX and KVM tries to insert [0, U32_MAX], which overlaps the
reserved Arm Architecture Calls ranges. KVM_ARM_VM_SMCCC_FILTER then
returns -EEXIST instead of the -EINVAL that the smccc_filter selftest
expects for an empty range.
Reject a zero function count explicitly.
Tested with a userspace reproducer on an arm64 VHE host under QEMU TCG:
EEXIST before, EINVAL after.
Fixes: 821d935c87bc ("KVM: arm64: Introduce support for userspace SMCCC filtering")
Assisted-by: LLM
Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
---
arch/arm64/kvm/hypercalls.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c
index b11b8821c9fb..dfa25bb6f25d 100644
--- a/arch/arm64/kvm/hypercalls.c
+++ b/arch/arm64/kvm/hypercalls.c
@@ -185,7 +185,8 @@ static int kvm_smccc_set_filter(struct kvm *kvm, struct kvm_smccc_filter __user
start = filter.base;
end = start + filter.nr_functions - 1;
- if (end < start || filter.action >= NR_SMCCC_FILTER_ACTIONS)
+ if (!filter.nr_functions || end < start ||
+ filter.action >= NR_SMCCC_FILTER_ACTIONS)
return -EINVAL;
mutex_lock(&kvm->arch.config_lock);
--
2.39.5 (Apple Git-154)
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH 1/2] KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0
2026-08-29 5:48 ` [PATCH 1/2] " Karl Mehltretter
@ 2026-08-29 15:04 ` Fuad Tabba
2026-08-29 15:53 ` Karl Mehltretter
0 siblings, 1 reply; 7+ messages in thread
From: Fuad Tabba @ 2026-08-29 15:04 UTC (permalink / raw)
To: Karl Mehltretter
Cc: Marc Zyngier, Oliver Upton, kvmarm, Joey Gouly, Steffen Eiden,
Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon,
Mark Rutland, Paolo Bonzini, Sean Christopherson, Shuah Khan,
linux-arm-kernel, linux-kernel, kvm, linux-kselftest
On Sat, 29 Aug 2026 at 06:50, Karl Mehltretter <kmehltretter@gmail.com> wrote:
>
> kvm_smccc_set_filter() only rejects a range if its inclusive end,
> base + nr_functions - 1, is below base. That catches an empty range
> (nr_functions == 0) at every nonzero base, but at base 0 the end wraps
> to U32_MAX and KVM tries to insert [0, U32_MAX], which overlaps the
> reserved Arm Architecture Calls ranges. KVM_ARM_VM_SMCCC_FILTER then
> returns -EEXIST instead of the -EINVAL that the smccc_filter selftest
> expects for an empty range.
>
> Reject a zero function count explicitly.
>
> Tested with a userspace reproducer on an arm64 VHE host under QEMU TCG:
> EEXIST before, EINVAL after.
>
> Fixes: 821d935c87bc ("KVM: arm64: Introduce support for userspace SMCCC filtering")
> Assisted-by: LLM
nit: this should be `Assisted-by: AGENT_NAME:MODEL_VERSION [TOOL1]
[TOOL2]` rather than LLM
> Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
I think Sashiko is onto something, but that's for another day.
Reviewed-by: Fuad Tabba <fuad.tabba@linux.dev>
Tested-by: Fuad Tabba < fuad.tabba@linux.dev>
Cheers,
/fuad
> ---
> arch/arm64/kvm/hypercalls.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c
> index b11b8821c9fb..dfa25bb6f25d 100644
> --- a/arch/arm64/kvm/hypercalls.c
> +++ b/arch/arm64/kvm/hypercalls.c
> @@ -185,7 +185,8 @@ static int kvm_smccc_set_filter(struct kvm *kvm, struct kvm_smccc_filter __user
> start = filter.base;
> end = start + filter.nr_functions - 1;
>
> - if (end < start || filter.action >= NR_SMCCC_FILTER_ACTIONS)
> + if (!filter.nr_functions || end < start ||
> + filter.action >= NR_SMCCC_FILTER_ACTIONS)
> return -EINVAL;
>
> mutex_lock(&kvm->arch.config_lock);
> --
> 2.39.5 (Apple Git-154)
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 1/2] KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0
2026-08-29 15:04 ` Fuad Tabba
@ 2026-08-29 15:53 ` Karl Mehltretter
2026-08-29 15:55 ` Fuad Tabba
0 siblings, 1 reply; 7+ messages in thread
From: Karl Mehltretter @ 2026-08-29 15:53 UTC (permalink / raw)
To: Fuad Tabba
Cc: Marc Zyngier, Oliver Upton, kvmarm, Joey Gouly, Steffen Eiden,
Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon,
Mark Rutland, Paolo Bonzini, Sean Christopherson, Shuah Khan,
linux-arm-kernel, linux-kernel, kvm, linux-kselftest
On Sat, Aug 29, 2026 at 04:04:01PM +0100, Fuad Tabba wrote:
> > Fixes: 821d935c87bc ("KVM: arm64: Introduce support for userspace SMCCC filtering")
> > Assisted-by: LLM
>
> nit: this should be `Assisted-by: AGENT_NAME:MODEL_VERSION [TOOL1]
> [TOOL2]` rather than LLM
>
When I first saw 'LLM' in a patch I thought so too.
But it is now allowed, see recent discussion and merge:
https://lore.kernel.org/r/87qzkuahlr.fsf@trenco.lwn.net/
816d9992d9ed ("coding-assistants: simplify attribution")
> Reviewed-by: Fuad Tabba <fuad.tabba@linux.dev>
> Tested-by: Fuad Tabba < fuad.tabba@linux.dev>
Thanks for the review and also testing!
Karl
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH 1/2] KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0
2026-08-29 15:53 ` Karl Mehltretter
@ 2026-08-29 15:55 ` Fuad Tabba
0 siblings, 0 replies; 7+ messages in thread
From: Fuad Tabba @ 2026-08-29 15:55 UTC (permalink / raw)
To: Karl Mehltretter
Cc: Marc Zyngier, Oliver Upton, kvmarm, Joey Gouly, Steffen Eiden,
Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon,
Mark Rutland, Paolo Bonzini, Sean Christopherson, Shuah Khan,
linux-arm-kernel, linux-kernel, kvm, linux-kselftest
On Sat, 29 Aug 2026 at 16:53, Karl Mehltretter <kmehltretter@gmail.com> wrote:
>
> On Sat, Aug 29, 2026 at 04:04:01PM +0100, Fuad Tabba wrote:
> > > Fixes: 821d935c87bc ("KVM: arm64: Introduce support for userspace SMCCC filtering")
> > > Assisted-by: LLM
> >
> > nit: this should be `Assisted-by: AGENT_NAME:MODEL_VERSION [TOOL1]
> > [TOOL2]` rather than LLM
> >
>
> When I first saw 'LLM' in a patch I thought so too.
>
> But it is now allowed, see recent discussion and merge:
>
> https://lore.kernel.org/r/87qzkuahlr.fsf@trenco.lwn.net/
I missed that. Makes sense to be honest. Either way, that was just a nit :)
Thanks!
/fuad
>
> 816d9992d9ed ("coding-assistants: simplify attribution")
>
> > Reviewed-by: Fuad Tabba <fuad.tabba@linux.dev>
> > Tested-by: Fuad Tabba < fuad.tabba@linux.dev>
>
> Thanks for the review and also testing!
>
> Karl
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] KVM: arm64: selftests: Test empty SMCCC filter range at base 0
2026-08-29 5:48 [PATCH 0/2] KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0 Karl Mehltretter
2026-08-29 5:48 ` [PATCH 1/2] " Karl Mehltretter
@ 2026-08-29 5:48 ` Karl Mehltretter
2026-08-29 15:04 ` Fuad Tabba
1 sibling, 1 reply; 7+ messages in thread
From: Karl Mehltretter @ 2026-08-29 5:48 UTC (permalink / raw)
To: Marc Zyngier, Oliver Upton, kvmarm
Cc: Karl Mehltretter, Fuad Tabba, Joey Gouly, Steffen Eiden,
Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon,
Mark Rutland, Paolo Bonzini, Sean Christopherson, Shuah Khan,
linux-arm-kernel, linux-kernel, kvm, linux-kselftest
test_invalid_nr_functions() only checks an empty range at
PSCI_0_2_FN64_CPU_ON, which KVM's end < start check happens to catch.
It never exercised base 0, where the inclusive end wraps to U32_MAX
instead.
Add the base 0 case. Without the preceding fix it fails with EEXIST.
Assisted-by: LLM
Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
---
tools/testing/selftests/kvm/arm64/smccc_filter.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tools/testing/selftests/kvm/arm64/smccc_filter.c b/tools/testing/selftests/kvm/arm64/smccc_filter.c
index 21e41880261b..a41ed3e016ba 100644
--- a/tools/testing/selftests/kvm/arm64/smccc_filter.c
+++ b/tools/testing/selftests/kvm/arm64/smccc_filter.c
@@ -140,6 +140,10 @@ static void test_invalid_nr_functions(void)
TEST_ASSERT(r < 0 && errno == EINVAL,
"Attempt to filter 0 functions should return EINVAL");
+ r = __set_smccc_filter(vm, 0, 0, KVM_SMCCC_FILTER_DENY);
+ TEST_ASSERT(r < 0 && errno == EINVAL,
+ "Attempt to filter 0 functions at base 0 should return EINVAL");
+
kvm_vm_free(vm);
}
--
2.39.5 (Apple Git-154)
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] KVM: arm64: selftests: Test empty SMCCC filter range at base 0
2026-08-29 5:48 ` [PATCH 2/2] KVM: arm64: selftests: Test " Karl Mehltretter
@ 2026-08-29 15:04 ` Fuad Tabba
0 siblings, 0 replies; 7+ messages in thread
From: Fuad Tabba @ 2026-08-29 15:04 UTC (permalink / raw)
To: Karl Mehltretter
Cc: Marc Zyngier, Oliver Upton, kvmarm, Joey Gouly, Steffen Eiden,
Suzuki K Poulose, Zenghui Yu, Catalin Marinas, Will Deacon,
Mark Rutland, Paolo Bonzini, Sean Christopherson, Shuah Khan,
linux-arm-kernel, linux-kernel, kvm, linux-kselftest
On Sat, 29 Aug 2026 at 06:50, Karl Mehltretter <kmehltretter@gmail.com> wrote:
>
> test_invalid_nr_functions() only checks an empty range at
> PSCI_0_2_FN64_CPU_ON, which KVM's end < start check happens to catch.
> It never exercised base 0, where the inclusive end wraps to U32_MAX
> instead.
>
> Add the base 0 case. Without the preceding fix it fails with EEXIST.
>
> Assisted-by: LLM
> Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
Same nit as before.
Reviewed-by: Fuad Tabba <fuad.tabba@linux.dev>
Tested-by: Fuad Tabba < fuad.tabba@linux.dev>
Cheers,
/fuad
> ---
> tools/testing/selftests/kvm/arm64/smccc_filter.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/tools/testing/selftests/kvm/arm64/smccc_filter.c b/tools/testing/selftests/kvm/arm64/smccc_filter.c
> index 21e41880261b..a41ed3e016ba 100644
> --- a/tools/testing/selftests/kvm/arm64/smccc_filter.c
> +++ b/tools/testing/selftests/kvm/arm64/smccc_filter.c
> @@ -140,6 +140,10 @@ static void test_invalid_nr_functions(void)
> TEST_ASSERT(r < 0 && errno == EINVAL,
> "Attempt to filter 0 functions should return EINVAL");
>
> + r = __set_smccc_filter(vm, 0, 0, KVM_SMCCC_FILTER_DENY);
> + TEST_ASSERT(r < 0 && errno == EINVAL,
> + "Attempt to filter 0 functions at base 0 should return EINVAL");
> +
> kvm_vm_free(vm);
> }
>
> --
> 2.39.5 (Apple Git-154)
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-08-29 15:56 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-29 5:48 [PATCH 0/2] KVM: arm64: Return -EINVAL for an empty SMCCC filter range at base 0 Karl Mehltretter
2026-08-29 5:48 ` [PATCH 1/2] " Karl Mehltretter
2026-08-29 15:04 ` Fuad Tabba
2026-08-29 15:53 ` Karl Mehltretter
2026-08-29 15:55 ` Fuad Tabba
2026-08-29 5:48 ` [PATCH 2/2] KVM: arm64: selftests: Test " Karl Mehltretter
2026-08-29 15:04 ` Fuad Tabba
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).