]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iommufd: Fix out_fput in iommufd_fault_alloc()
authorNicolin Chen <nicolinc@nvidia.com>
Tue, 3 Dec 2024 08:02:54 +0000 (00:02 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 14 Dec 2024 19:03:22 +0000 (20:03 +0100)
commit af7f4780514f850322b2959032ecaa96e4b26472 upstream.

As fput() calls the file->f_op->release op, where fault obj and ictx are
getting released, there is no need to release these two after fput() one
more time, which would result in imbalanced refcounts:
  refcount_t: decrement hit 0; leaking memory.
  WARNING: CPU: 48 PID: 2369 at lib/refcount.c:31 refcount_warn_saturate+0x60/0x230
  Call trace:
   refcount_warn_saturate+0x60/0x230 (P)
   refcount_warn_saturate+0x60/0x230 (L)
   iommufd_fault_fops_release+0x9c/0xe0 [iommufd]
  ...
  VFS: Close: file count is 0 (f_op=iommufd_fops [iommufd])
  WARNING: CPU: 48 PID: 2369 at fs/open.c:1507 filp_flush+0x3c/0xf0
  Call trace:
   filp_flush+0x3c/0xf0 (P)
   filp_flush+0x3c/0xf0 (L)
   __arm64_sys_close+0x34/0x98
  ...
  imbalanced put on file reference count
  WARNING: CPU: 48 PID: 2369 at fs/file.c:74 __file_ref_put+0x100/0x138
  Call trace:
   __file_ref_put+0x100/0x138 (P)
   __file_ref_put+0x100/0x138 (L)
   __fput_sync+0x4c/0xd0

Drop those two lines to fix the warnings above.

Cc: stable@vger.kernel.org
Fixes: 07838f7fd529 ("iommufd: Add iommufd fault object")
Link: https://patch.msgid.link/r/b5651beb3a6b1adeef26fffac24607353bf67ba1.1733212723.git.nicolinc@nvidia.com
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-by: Yi Liu <yi.l.liu@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iommu/iommufd/fault.c

index e590973ce5cfa28375bc78dd9cd7eb5576794df8..b8393a8c07539641f8e9b4f53858e8bd09854da4 100644 (file)
@@ -415,8 +415,6 @@ out_put_fdno:
        put_unused_fd(fdno);
 out_fput:
        fput(filep);
-       refcount_dec(&fault->obj.users);
-       iommufd_ctx_put(fault->ictx);
 out_abort:
        iommufd_object_abort_and_destroy(ucmd->ictx, &fault->obj);