From nobody Mon Feb 9 05:52:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DACC3281520; Fri, 16 Jan 2026 08:11:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768551073; cv=none; b=bfVliZExOcveAA7SYeevDR5QKDoAv158ski9c73vruZZeDhOJlEqGXBuVSwH2fVzdvNRYhusnmdapW8T1WerokTTSElBW94zSUcjO+eovOkVm6PoRYtAXvzeziNz1BfPfh3lXIIWFt71QpOpvZN/P7YHrQpneRmjFF5XmVcWeXw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768551073; c=relaxed/simple; bh=69pG6w4Xdr2sPbaRa1R8SZLmAPZBUmeVdfDx/U98QV4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Aw2OtTvy+x5mSkGdrA23nzm5e2fRjcj/lzFFjcZ0R0oTHvErv4gVtcqBQyNkc5kk/Wa1yFREJ3CXAc6YbHPgAvJZT3LaPUfCgsza7ByQtO76z5Ci43Ro4a63NFwh7hSFtA7W6XBfeGM7wvI+m+tL/mHVzrflUyGuc5ktvP6bK+s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NDarakeb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NDarakeb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A7585C19423; Fri, 16 Jan 2026 08:11:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768551073; bh=69pG6w4Xdr2sPbaRa1R8SZLmAPZBUmeVdfDx/U98QV4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NDarakebh7JLgCgBuxTphef3UWbCWlNQzQ677JzLKyz4LFH4dJIeFUUxIU+Tl/+Su +RVn/BFp31fO9p7/cvdAH6bO4FCfhTlPcxY0tPk3EZHpnxgssN7vdum2XuKdKFHRmU HTEE60r/KPCpXVPNkUsc5orEtDRPeMngqSJd3+lVZjTutTANy7TbJLoSgFiqLmSLmI pWJd+XvFyMBKgVf63S+1jqjs13YhF8O3zACCQe24nBYz7YLXG3b71h9mVidc/rKfa1 oGvtpJ68xqsEvnTKJc1FaPyh/9jekXbOlHOt5NBKSS2WC5wsHBKwnjnxGB0+lF9sFe Wj4nhlBOoGCgQ== From: Tzung-Bi Shih To: Benson Leung , Greg Kroah-Hartman , "Rafael J . Wysocki" , Danilo Krummrich , Bartosz Golaszewski , Linus Walleij Cc: Jonathan Corbet , Shuah Khan , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, linux-kselftest@vger.kernel.org, tzungbi@kernel.org, Laurent Pinchart , Wolfram Sang , Simona Vetter , Dan Williams , Jason Gunthorpe , linux-gpio@vger.kernel.org, stable@vger.kernel.org Subject: [PATCH 02/23] gpiolib: cdev: Fix resource leaks on errors in gpiolib_cdev_register() Date: Fri, 16 Jan 2026 08:10:15 +0000 Message-ID: <20260116081036.352286-3-tzungbi@kernel.org> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog In-Reply-To: <20260116081036.352286-1-tzungbi@kernel.org> References: <20260116081036.352286-1-tzungbi@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On error handling paths, gpiolib_cdev_register() doesn't free the allocated resources which results leaks. Fix it. Cc: stable@vger.kernel.org Fixes: 7b9b77a8bba9 ("gpiolib: add a per-gpio_device line state notificatio= n workqueue") Fixes: d83cee3d2bb1 ("gpio: protect the pointer to gpio_chip in gpio_device= with SRCU") Signed-off-by: Tzung-Bi Shih --- drivers/gpio/gpiolib-cdev.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c index 3735c9fe1502..ba1eae15852d 100644 --- a/drivers/gpio/gpiolib-cdev.c +++ b/drivers/gpio/gpiolib-cdev.c @@ -2797,16 +2797,23 @@ int gpiolib_cdev_register(struct gpio_device *gdev,= dev_t devt) =20 ret =3D cdev_device_add(&gdev->chrdev, &gdev->dev); if (ret) - return ret; + goto err_free_workqueue; =20 guard(srcu)(&gdev->srcu); gc =3D srcu_dereference(gdev->chip, &gdev->srcu); - if (!gc) - return -ENODEV; + if (!gc) { + ret =3D -ENODEV; + goto err_free_cdev; + } =20 gpiochip_dbg(gc, "added GPIO chardev (%d:%d)\n", MAJOR(devt), gdev->id); =20 return 0; +err_free_cdev: + cdev_device_del(&gdev->chrdev, &gdev->dev); +err_free_workqueue: + destroy_workqueue(gdev->line_state_wq); + return ret; } =20 void gpiolib_cdev_unregister(struct gpio_device *gdev) --=20 2.52.0.457.g6b5491de43-goog