Message ID | 20200512031328.189865.48627.stgit@awfm-01.aw.intel.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Jason Gunthorpe |
Headers | show |
Series | minor hfi and qib fixes | expand |
On Mon, May 11, 2020 at 11:13:28PM -0400, Dennis Dalessandro wrote: > From: Kaike Wan <kaike.wan@intel.com> > > When kobject_init_and_add() returns an error in the function > qib_create_port_files(), the function kobject_put() is not called for > the corresponding kobject, which potentially leads to memory leak. > > This patch fixes the issue by calling kobject_put() even if > kobject_init_and_add() fails. In addition, the ppd->diagc_kobj is > released along with other kobjects when the sysfs is unregistered. > > Fixes: f931551bafe1 ("IB/qib: Add new qib driver for QLogic PCIe InfiniBand adapters") > Cc: <stable@vger.kernel.org> > Suggested-by: Lin Yi <teroincn@gmail.com> > Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> > Signed-off-by: Kaike Wan <kaike.wan@intel.com> > Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> > --- > drivers/infiniband/hw/qib/qib_sysfs.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > It is not "even if", the kobject_put() must be called if kobject_init_and_add() fails. Thanks, Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
On Mon, May 11, 2020 at 11:13:28PM -0400, Dennis Dalessandro wrote: > From: Kaike Wan <kaike.wan@intel.com> > > When kobject_init_and_add() returns an error in the function > qib_create_port_files(), the function kobject_put() is not called for > the corresponding kobject, which potentially leads to memory leak. > > This patch fixes the issue by calling kobject_put() even if > kobject_init_and_add() fails. In addition, the ppd->diagc_kobj is > released along with other kobjects when the sysfs is unregistered. > > Fixes: f931551bafe1 ("IB/qib: Add new qib driver for QLogic PCIe InfiniBand adapters") > Cc: <stable@vger.kernel.org> > Suggested-by: Lin Yi <teroincn@gmail.com> > Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> > Signed-off-by: Kaike Wan <kaike.wan@intel.com> > Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> > Reviewed-by: Leon Romanovsky <leonro@mellanox.com> > --- > drivers/infiniband/hw/qib/qib_sysfs.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) Applied to for-rc Are you respinning the other two patches? Thanks, Jason
On 5/19/2020 8:00 PM, Jason Gunthorpe wrote: > On Mon, May 11, 2020 at 11:13:28PM -0400, Dennis Dalessandro wrote: >> From: Kaike Wan <kaike.wan@intel.com> >> >> When kobject_init_and_add() returns an error in the function >> qib_create_port_files(), the function kobject_put() is not called for >> the corresponding kobject, which potentially leads to memory leak. >> >> This patch fixes the issue by calling kobject_put() even if >> kobject_init_and_add() fails. In addition, the ppd->diagc_kobj is >> released along with other kobjects when the sysfs is unregistered. >> >> Fixes: f931551bafe1 ("IB/qib: Add new qib driver for QLogic PCIe InfiniBand adapters") >> Cc: <stable@vger.kernel.org> >> Suggested-by: Lin Yi <teroincn@gmail.com> >> Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> >> Signed-off-by: Kaike Wan <kaike.wan@intel.com> >> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> >> Reviewed-by: Leon Romanovsky <leonro@mellanox.com> >> --- >> drivers/infiniband/hw/qib/qib_sysfs.c | 9 +++++---- >> 1 file changed, 5 insertions(+), 4 deletions(-) > > Applied to for-rc > > Are you respinning the other two patches? Yes, Kaike is working on getting updates to those two out. -Denny
diff --git a/drivers/infiniband/hw/qib/qib_sysfs.c b/drivers/infiniband/hw/qib/qib_sysfs.c index 568b21e..021df06 100644 --- a/drivers/infiniband/hw/qib/qib_sysfs.c +++ b/drivers/infiniband/hw/qib/qib_sysfs.c @@ -760,7 +760,7 @@ int qib_create_port_files(struct ib_device *ibdev, u8 port_num, qib_dev_err(dd, "Skipping linkcontrol sysfs info, (err %d) port %u\n", ret, port_num); - goto bail; + goto bail_link; } kobject_uevent(&ppd->pport_kobj, KOBJ_ADD); @@ -770,7 +770,7 @@ int qib_create_port_files(struct ib_device *ibdev, u8 port_num, qib_dev_err(dd, "Skipping sl2vl sysfs info, (err %d) port %u\n", ret, port_num); - goto bail_link; + goto bail_sl; } kobject_uevent(&ppd->sl2vl_kobj, KOBJ_ADD); @@ -780,7 +780,7 @@ int qib_create_port_files(struct ib_device *ibdev, u8 port_num, qib_dev_err(dd, "Skipping diag_counters sysfs info, (err %d) port %u\n", ret, port_num); - goto bail_sl; + goto bail_diagc; } kobject_uevent(&ppd->diagc_kobj, KOBJ_ADD); @@ -793,7 +793,7 @@ int qib_create_port_files(struct ib_device *ibdev, u8 port_num, qib_dev_err(dd, "Skipping Congestion Control sysfs info, (err %d) port %u\n", ret, port_num); - goto bail_diagc; + goto bail_cc; } kobject_uevent(&ppd->pport_cc_kobj, KOBJ_ADD); @@ -854,6 +854,7 @@ void qib_verbs_unregister_sysfs(struct qib_devdata *dd) &cc_table_bin_attr); kobject_put(&ppd->pport_cc_kobj); } + kobject_put(&ppd->diagc_kobj); kobject_put(&ppd->sl2vl_kobj); kobject_put(&ppd->pport_kobj); }