]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: selftests: Fix mostly theoretical leak of VM's binary stats FD
authorSean Christopherson <seanjc@google.com>
Sat, 11 Jan 2025 00:50:41 +0000 (16:50 -0800)
committerSean Christopherson <seanjc@google.com>
Wed, 12 Feb 2025 17:02:42 +0000 (09:02 -0800)
When allocating and freeing a VM's cached binary stats info, check for a
NULL descriptor, not a '0' file descriptor, as '0' is a legal FD.  E.g. in
the unlikely scenario the kernel installs the stats FD at entry '0',
selftests would reallocate on the next __vm_get_stat() and/or fail to free
the stats in kvm_vm_free().

Fixes: 83f6e109f562 ("KVM: selftests: Cache binary stats metadata for duration of test")
Link: https://lore.kernel.org/r/20250111005049.1247555-2-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
tools/testing/selftests/kvm/lib/kvm_util.c

index 33fefeb3ca441fd9fad08e35adcb05bb1fdf3841..91d295ef5d02c520e202fa28c7ca77aefce11406 100644 (file)
@@ -749,7 +749,7 @@ void kvm_vm_free(struct kvm_vm *vmp)
                return;
 
        /* Free cached stats metadata and close FD */
-       if (vmp->stats_fd) {
+       if (vmp->stats_desc) {
                free(vmp->stats_desc);
                close(vmp->stats_fd);
        }
@@ -2218,7 +2218,7 @@ void __vm_get_stat(struct kvm_vm *vm, const char *stat_name, uint64_t *data,
        size_t size_desc;
        int i;
 
-       if (!vm->stats_fd) {
+       if (!vm->stats_desc) {
                vm->stats_fd = vm_get_stats_fd(vm);
                read_stats_header(vm->stats_fd, &vm->stats_header);
                vm->stats_desc = read_stats_descriptors(vm->stats_fd,