[PATCH] char: pc8736x_gpio: check cdev_add() return value
From: Linkai Gong
Date: Tue Aug 11 2026 - 02:56:13 EST
cdev_add() can fail, but the driver ignored the return value and still
reported success. That leaves a registered chrdev region without usable
file operations.
Check the return value, report the error, and unwind the chrdev region
and I/O region on failure.
Fixes: babcfade4737 ("[PATCH] pc8736x_gpio: fix re-modprobe errors: fix/finish cdev-init")
Signed-off-by: Linkai Gong <gonglinkai@xxxxxxxxxx>
---
drivers/char/pc8736x_gpio.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/char/pc8736x_gpio.c b/drivers/char/pc8736x_gpio.c
index 5f4696813cea..1a8adf1e8fa2 100644
--- a/drivers/char/pc8736x_gpio.c
+++ b/drivers/char/pc8736x_gpio.c
@@ -321,12 +321,17 @@ static int __init pc8736x_gpio_init(void)
pc8736x_init_shadow();
- /* ignore minor errs, and succeed */
cdev_init(&pc8736x_gpio_cdev, &pc8736x_gpio_fileops);
- cdev_add(&pc8736x_gpio_cdev, devid, PC8736X_GPIO_CT);
+ rc = cdev_add(&pc8736x_gpio_cdev, devid, PC8736X_GPIO_CT);
+ if (rc) {
+ dev_err(&pdev->dev, "cdev_add failed: %d\n", rc);
+ goto undo_chrdev_region;
+ }
return 0;
+undo_chrdev_region:
+ unregister_chrdev_region(devid, PC8736X_GPIO_CT);
undo_request_region:
release_region(pc8736x_gpio_base, PC8736X_GPIO_RANGE);
undo_platform_dev_add:
--
2.25.1