]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: selftests: Fix signedness issue with vCPU mmap size check
authorJames Houghton <jthoughton@google.com>
Fri, 11 Jul 2025 00:17:42 +0000 (00:17 +0000)
committerSean Christopherson <seanjc@google.com>
Tue, 19 Aug 2025 14:43:56 +0000 (07:43 -0700)
Check that the return value of KVM_GET_VCPU_MMAP_SIZE is non-negative
before comparing with sizeof(kvm_run). If KVM_GET_VCPU_MMAP_SIZE fails,
it will return -1, and `-1 > sizeof(kvm_run)` is true, so the ASSERT
passes.

There are no other locations in tools/testing/selftests/kvm that make
the same mistake.

Signed-off-by: James Houghton <jthoughton@google.com>
Link: https://lore.kernel.org/r/20250711001742.1965347-1-jthoughton@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
tools/testing/selftests/kvm/lib/kvm_util.c

index c3f5142b0a5415673815cb308a97ad7ea5b87656..40e18034ac238625ee1c937556841774207c8f1b 100644 (file)
@@ -24,7 +24,7 @@ uint32_t guest_random_seed;
 struct guest_random_state guest_rng;
 static uint32_t last_guest_seed;
 
-static int vcpu_mmap_sz(void);
+static size_t vcpu_mmap_sz(void);
 
 int __open_path_or_exit(const char *path, int flags, const char *enoent_help)
 {
@@ -1321,14 +1321,14 @@ void vm_guest_mem_fallocate(struct kvm_vm *vm, uint64_t base, uint64_t size,
 }
 
 /* Returns the size of a vCPU's kvm_run structure. */
-static int vcpu_mmap_sz(void)
+static size_t vcpu_mmap_sz(void)
 {
        int dev_fd, ret;
 
        dev_fd = open_kvm_dev_path_or_exit();
 
        ret = ioctl(dev_fd, KVM_GET_VCPU_MMAP_SIZE, NULL);
-       TEST_ASSERT(ret >= sizeof(struct kvm_run),
+       TEST_ASSERT(ret >= 0 && ret >= sizeof(struct kvm_run),
                    KVM_IOCTL_ERROR(KVM_GET_VCPU_MMAP_SIZE, ret));
 
        close(dev_fd);
@@ -1369,7 +1369,7 @@ struct kvm_vcpu *__vm_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id)
        TEST_ASSERT_VM_VCPU_IOCTL(vcpu->fd >= 0, KVM_CREATE_VCPU, vcpu->fd, vm);
 
        TEST_ASSERT(vcpu_mmap_sz() >= sizeof(*vcpu->run), "vcpu mmap size "
-               "smaller than expected, vcpu_mmap_sz: %i expected_min: %zi",
+               "smaller than expected, vcpu_mmap_sz: %zi expected_min: %zi",
                vcpu_mmap_sz(), sizeof(*vcpu->run));
        vcpu->run = (struct kvm_run *) mmap(NULL, vcpu_mmap_sz(),
                PROT_READ | PROT_WRITE, MAP_SHARED, vcpu->fd, 0);