Rely on the fd exit path machinery.
Signed-off-by: Christian Brauner (Amutable) <[email protected]>
---
drivers/char/tpm/tpm_vtpm_proxy.c | 30 +++++++++---------------------
1 file changed, 9 insertions(+), 21 deletions(-)
diff --git a/drivers/char/tpm/tpm_vtpm_proxy.c
b/drivers/char/tpm/tpm_vtpm_proxy.c
index b81fd2a537df..8eb87044596a 100644
--- a/drivers/char/tpm/tpm_vtpm_proxy.c
+++ b/drivers/char/tpm/tpm_vtpm_proxy.c
@@ -531,8 +531,8 @@ static struct file *vtpm_proxy_create_device(
struct vtpm_proxy_new_dev *vtpm_new_dev)
{
struct proxy_dev *proxy_dev;
- int rc, fd;
struct file *file;
+ int rc;
if (vtpm_new_dev->flags & ~VTPM_PROXY_FLAGS_ALL)
return ERR_PTR(-EOPNOTSUPP);
@@ -544,20 +544,15 @@ static struct file *vtpm_proxy_create_device(
proxy_dev->flags = vtpm_new_dev->flags;
/* setup an anonymous file for the server-side */
- fd = get_unused_fd_flags(O_RDWR);
- if (fd < 0) {
- rc = fd;
+ FD_PREPARE(fdf, O_RDWR,
+ anon_inode_getfile("[vtpms]", &vtpm_proxy_fops, proxy_dev,
+ O_RDWR));
+ if (IS_ERR(fdf)) {
+ rc = PTR_ERR(fdf);
goto err_delete_proxy_dev;
}
+ file = fd_prepare_file(fdf);
- file = anon_inode_getfile("[vtpms]", &vtpm_proxy_fops, proxy_dev,
- O_RDWR);
- if (IS_ERR(file)) {
- rc = PTR_ERR(file);
- goto err_put_unused_fd;
- }
-
- /* from now on we can unwind with put_unused_fd() + fput() */
/* simulate an open() on the server side */
vtpm_proxy_fops_open(file);
@@ -566,16 +561,13 @@ static struct file *vtpm_proxy_create_device(
vtpm_proxy_work_start(proxy_dev);
- vtpm_new_dev->fd = fd;
+ vtpm_new_dev->fd = fd_prepare_fd(fdf);
vtpm_new_dev->major = MAJOR(proxy_dev->chip->dev.devt);
vtpm_new_dev->minor = MINOR(proxy_dev->chip->dev.devt);
vtpm_new_dev->tpm_num = proxy_dev->chip->dev_num;
return file;
-err_put_unused_fd:
- put_unused_fd(fd);
-
err_delete_proxy_dev:
vtpm_proxy_delete_proxy_dev(proxy_dev);
@@ -640,13 +632,9 @@ static long vtpmx_ioc_new_dev(struct file *file, unsigned
int ioctl,
return PTR_ERR(vtpm_file);
if (copy_to_user(vtpm_new_dev_p, &vtpm_new_dev,
- sizeof(vtpm_new_dev))) {
- put_unused_fd(vtpm_new_dev.fd);
- fput(vtpm_file);
+ sizeof(vtpm_new_dev)))
return -EFAULT;
- }
- fd_install(vtpm_new_dev.fd, vtpm_file);
return 0;
}
--
2.53.0