The refactored check_steal_time_uapi() creates a temporary VM via
vm_create_with_one_vcpu(), whose default memslot0 only covers GPA
0..~2MB.  Setting st_ipa to ST_GPA_BASE (1 << 30) causes
kvm_arm_pvtime_set_attr() to fail with EINVAL because gfn_to_hva()
cannot find a valid memslot at the target GFN.

Add a memslot at ST_GPA_BASE in the temporary VM, mirroring what
the main test already does.

Reported-by: Mark Brown <[email protected]>
Closes: https://lore.kernel.org/lkml/[email protected]
Signed-off-by: Jiakai Xu <[email protected]>
Signed-off-by: Jiakai Xu <[email protected]>
Fixes: 40351ed924dd30 ("KVM: selftests: Refactor UAPI tests into dedicated 
function")
---
 tools/testing/selftests/kvm/steal_time.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tools/testing/selftests/kvm/steal_time.c 
b/tools/testing/selftests/kvm/steal_time.c
index 7df2bc8eec02..2b01b466ddc1 100644
--- a/tools/testing/selftests/kvm/steal_time.c
+++ b/tools/testing/selftests/kvm/steal_time.c
@@ -213,6 +213,10 @@ static void check_steal_time_uapi(void)
 
        vm = vm_create_with_one_vcpu(&vcpu, NULL);
 
+       /* ST_GPA_BASE needs a valid memslot for gfn_to_hva() to succeed */
+       vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, ST_GPA_BASE,
+                                   1, 1, 0);
+
        struct kvm_device_attr dev = {
                .group = KVM_ARM_VCPU_PVTIME_CTRL,
                .attr = KVM_ARM_VCPU_PVTIME_IPA,
-- 
2.34.1


Reply via email to