mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
uacce: fix cdev handling in the cleanup path
When cdev_device_add fails, it internally releases the cdev memory,
and if cdev_device_del is then executed, it will cause a hang error.
To fix it, we check the return value of cdev_device_add() and clear
uacce->cdev to avoid calling cdev_device_del in the uacce_remove.
Fixes: 015d239ac0 ("uacce: add uacce driver")
Cc: stable@vger.kernel.org
Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
Signed-off-by: Chenghai Huang <huangchenghai2@huawei.com>
Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Link: https://patch.msgid.link/20251202061256.4158641-2-huangchenghai2@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
bba7fd1258
commit
a3bece3678
@@ -519,6 +519,8 @@ EXPORT_SYMBOL_GPL(uacce_alloc);
|
||||
*/
|
||||
int uacce_register(struct uacce_device *uacce)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!uacce)
|
||||
return -ENODEV;
|
||||
|
||||
@@ -529,7 +531,11 @@ int uacce_register(struct uacce_device *uacce)
|
||||
uacce->cdev->ops = &uacce_fops;
|
||||
uacce->cdev->owner = THIS_MODULE;
|
||||
|
||||
return cdev_device_add(uacce->cdev, &uacce->dev);
|
||||
ret = cdev_device_add(uacce->cdev, &uacce->dev);
|
||||
if (ret)
|
||||
uacce->cdev = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(uacce_register);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user