Commit 8a8c942c authored by Tzung-Bi Shih's avatar Tzung-Bi Shih Committed by Bartosz Golaszewski
Browse files

gpio: cdev: Fix resource leaks on errors in gpiolib_cdev_register()



On error handling paths, gpiolib_cdev_register() doesn't free the
allocated resources which results leaks.  Fix it.

Cc: stable@vger.kernel.org
Fixes: 7b9b77a8 ("gpiolib: add a per-gpio_device line state notification workqueue")
Fixes: d83cee3d ("gpio: protect the pointer to gpio_chip in gpio_device with SRCU")
Signed-off-by: default avatarTzung-Bi Shih <tzungbi@kernel.org>
Link: https://lore.kernel.org/r/20260120092650.2305319-1-tzungbi@kernel.org


Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
parent 70b3c280
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -2797,13 +2797,18 @@ int gpiolib_cdev_register(struct gpio_device *gdev, dev_t devt)
		return -ENOMEM;

	ret = cdev_device_add(&gdev->chrdev, &gdev->dev);
	if (ret)
	if (ret) {
		destroy_workqueue(gdev->line_state_wq);
		return ret;
	}

	guard(srcu)(&gdev->srcu);
	gc = srcu_dereference(gdev->chip, &gdev->srcu);
	if (!gc)
	if (!gc) {
		cdev_device_del(&gdev->chrdev, &gdev->dev);
		destroy_workqueue(gdev->line_state_wq);
		return -ENODEV;
	}

	gpiochip_dbg(gc, "added GPIO chardev (%d:%d)\n", MAJOR(devt), gdev->id);