Message ID | b5651beb3a6b1adeef26fffac24607353bf67ba1.1733212723.git.nicolinc@nvidia.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | iommufd: Fix a small bug in fault.c | expand |
On 2024/12/3 16:02, Nicolin Chen wrote: > 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. > > Fixes: 07838f7fd529 ("iommufd: Add iommufd fault object") > Cc: stable@vger.kernel.org > Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> > --- > drivers/iommu/iommufd/fault.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/drivers/iommu/iommufd/fault.c b/drivers/iommu/iommufd/fault.c > index 053b0e30f55a..1fe804e28a86 100644 > --- a/drivers/iommu/iommufd/fault.c > +++ b/drivers/iommu/iommufd/fault.c > @@ -420,8 +420,6 @@ int iommufd_fault_alloc(struct iommufd_ucmd *ucmd) > 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); > Reviewed-by: Yi Liu <yi.l.liu@intel.com>
diff --git a/drivers/iommu/iommufd/fault.c b/drivers/iommu/iommufd/fault.c index 053b0e30f55a..1fe804e28a86 100644 --- a/drivers/iommu/iommufd/fault.c +++ b/drivers/iommu/iommufd/fault.c @@ -420,8 +420,6 @@ int iommufd_fault_alloc(struct iommufd_ucmd *ucmd) 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);
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. Fixes: 07838f7fd529 ("iommufd: Add iommufd fault object") Cc: stable@vger.kernel.org Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> --- drivers/iommu/iommufd/fault.c | 2 -- 1 file changed, 2 deletions(-)