Commit 59f82aad authored by Oliver Upton's avatar Oliver Upton Committed by Paolo Bonzini

KVM: Pass the name of the VM fd to kvm_create_vm_debugfs()

At the time the VM fd is used in kvm_create_vm_debugfs(), the fd has
been allocated but not yet installed. It is only really useful as an
identifier in strings for the VM (such as debugfs).

Treat it exactly as such by passing the string name of the fd to
kvm_create_vm_debugfs(), futureproofing against possible misuse of the
VM fd.
Suggested-by: default avatarSean Christopherson <seanjc@google.com>
Signed-off-by: default avatarOliver Upton <oupton@google.com>
Message-Id: <20220720092259.3491733-5-oliver.upton@linux.dev>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 20020f4c
...@@ -1021,7 +1021,7 @@ static void kvm_destroy_vm_debugfs(struct kvm *kvm) ...@@ -1021,7 +1021,7 @@ static void kvm_destroy_vm_debugfs(struct kvm *kvm)
} }
} }
static int kvm_create_vm_debugfs(struct kvm *kvm, int fd) static int kvm_create_vm_debugfs(struct kvm *kvm, const char *fdname)
{ {
static DEFINE_MUTEX(kvm_debugfs_lock); static DEFINE_MUTEX(kvm_debugfs_lock);
struct dentry *dent; struct dentry *dent;
...@@ -1035,7 +1035,7 @@ static int kvm_create_vm_debugfs(struct kvm *kvm, int fd) ...@@ -1035,7 +1035,7 @@ static int kvm_create_vm_debugfs(struct kvm *kvm, int fd)
if (!debugfs_initialized()) if (!debugfs_initialized())
return 0; return 0;
snprintf(dir_name, sizeof(dir_name), "%d-%d", task_pid_nr(current), fd); snprintf(dir_name, sizeof(dir_name), "%d-%s", task_pid_nr(current), fdname);
mutex_lock(&kvm_debugfs_lock); mutex_lock(&kvm_debugfs_lock);
dent = debugfs_lookup(dir_name, kvm_debugfs_dir); dent = debugfs_lookup(dir_name, kvm_debugfs_dir);
if (dent) { if (dent) {
...@@ -4889,6 +4889,7 @@ EXPORT_SYMBOL_GPL(file_is_kvm); ...@@ -4889,6 +4889,7 @@ EXPORT_SYMBOL_GPL(file_is_kvm);
static int kvm_dev_ioctl_create_vm(unsigned long type) static int kvm_dev_ioctl_create_vm(unsigned long type)
{ {
char fdname[ITOA_MAX_LEN + 1];
int r, fd; int r, fd;
struct kvm *kvm; struct kvm *kvm;
struct file *file; struct file *file;
...@@ -4897,6 +4898,8 @@ static int kvm_dev_ioctl_create_vm(unsigned long type) ...@@ -4897,6 +4898,8 @@ static int kvm_dev_ioctl_create_vm(unsigned long type)
if (fd < 0) if (fd < 0)
return fd; return fd;
snprintf(fdname, sizeof(fdname), "%d", fd);
kvm = kvm_create_vm(type); kvm = kvm_create_vm(type);
if (IS_ERR(kvm)) { if (IS_ERR(kvm)) {
r = PTR_ERR(kvm); r = PTR_ERR(kvm);
...@@ -4920,7 +4923,7 @@ static int kvm_dev_ioctl_create_vm(unsigned long type) ...@@ -4920,7 +4923,7 @@ static int kvm_dev_ioctl_create_vm(unsigned long type)
* cases it will be called by the final fput(file) and will take * cases it will be called by the final fput(file) and will take
* care of doing kvm_put_kvm(kvm). * care of doing kvm_put_kvm(kvm).
*/ */
if (kvm_create_vm_debugfs(kvm, fd) < 0) { if (kvm_create_vm_debugfs(kvm, fdname) < 0) {
fput(file); fput(file);
r = -ENOMEM; r = -ENOMEM;
goto put_fd; goto put_fd;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment