• Paolo Bonzini's avatar
    KVM: Do not leak memory for duplicate debugfs directories · 85cd39af
    Paolo Bonzini authored
    KVM creates a debugfs directory for each VM in order to store statistics
    about the virtual machine.  The directory name is built from the process
    pid and a VM fd.  While generally unique, it is possible to keep a
    file descriptor alive in a way that causes duplicate directories, which
    manifests as these messages:
    
      [  471.846235] debugfs: Directory '20245-4' with parent 'kvm' already present!
    
    Even though this should not happen in practice, it is more or less
    expected in the case of KVM for testcases that call KVM_CREATE_VM and
    close the resulting file descriptor repeatedly and in parallel.
    
    When this happens, debugfs_create_dir() returns an error but
    kvm_create_vm_debugfs() goes on to allocate stat data structs which are
    later leaked.  The slow memory leak was spotted by syzkaller, where it
    caused OOM reports.
    
    Since the issue only affects debugfs, do a lookup before calling
    debugfs_create_dir, so that the message is downgraded and rate-limited.
    While at it, ensure kvm->debugfs_dentry is NULL rather than an error
    if it is not created.  This fixes kvm_destroy_vm_debugfs, which was not
    checking IS_ERR_OR_NULL correctly.
    
    Cc: stable@vger.kernel.org
    Fixes: 536a6f88 ("KVM: Create debugfs dir and stat files for each VM")
    Reported-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    Suggested-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    85cd39af
kvm_main.c 135 KB