]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
uacce: fix cdev handling in the cleanup path
authorWenkai Lin <linwenkai6@hisilicon.com>
Tue, 2 Dec 2025 06:12:53 +0000 (14:12 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 16 Jan 2026 15:43:16 +0000 (16:43 +0100)
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: 015d239ac014 ("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>
drivers/misc/uacce/uacce.c

index 42e7d2a2a90c6ed995e65061a027c4ba4d02303d..43d215fb8c7375ae1099c72fc9e48f5aebd1866f 100644 (file)
@@ -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);