| From | Greg Kroah-Hartman <> | Subject | [PATCH 5.4 040/453] habanalabs: put devices before driver removal | Date | Mon, 28 Dec 2020 13:44:36 +0100 |
| |
From: Ofir Bitton <obitton@habana.ai>
[ Upstream commit 5555b7c56bdec7a29c789fec27f84d40f52fbdfa ]
Driver never puts its device and control_device objects, hence a memory leak is introduced every driver removal.
Signed-off-by: Ofir Bitton <obitton@habana.ai> Reviewed-by: Oded Gabbay <ogabbay@kernel.org> Signed-off-by: Oded Gabbay <ogabbay@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> --- drivers/misc/habanalabs/device.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/misc/habanalabs/device.c b/drivers/misc/habanalabs/device.c index a7a4fed4d8995..3eeb1920ddb43 100644 --- a/drivers/misc/habanalabs/device.c +++ b/drivers/misc/habanalabs/device.c @@ -229,16 +229,16 @@ static int device_cdev_sysfs_add(struct hl_device *hdev) static void device_cdev_sysfs_del(struct hl_device *hdev) { - /* device_release() won't be called so must free devices explicitly */ - if (!hdev->cdev_sysfs_created) { - kfree(hdev->dev_ctrl); - kfree(hdev->dev); - return; - } + if (!hdev->cdev_sysfs_created) + goto put_devices; hl_sysfs_fini(hdev); cdev_device_del(&hdev->cdev_ctrl, hdev->dev_ctrl); cdev_device_del(&hdev->cdev, hdev->dev); + +put_devices: + put_device(hdev->dev); + put_device(hdev->dev_ctrl); } /* @@ -1285,9 +1285,9 @@ int hl_device_init(struct hl_device *hdev, struct class *hclass) early_fini: device_early_fini(hdev); free_dev_ctrl: - kfree(hdev->dev_ctrl); + put_device(hdev->dev_ctrl); free_dev: - kfree(hdev->dev); + put_device(hdev->dev); out_disabled: hdev->disabled = true; if (add_cdev_sysfs_on_err) -- 2.27.0
|