From patchwork Fri Mar 3 21:36:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= X-Patchwork-Id: 658902 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C2D65C7EE32 for ; Fri, 3 Mar 2023 21:37:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231793AbjCCVhp (ORCPT ); Fri, 3 Mar 2023 16:37:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231879AbjCCVho (ORCPT ); Fri, 3 Mar 2023 16:37:44 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7846062D9E for ; Fri, 3 Mar 2023 13:37:43 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pYD5q-0008Uv-9m; Fri, 03 Mar 2023 22:37:34 +0100 Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pYD5n-001eA4-VA; Fri, 03 Mar 2023 22:37:31 +0100 Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pYD5n-001wxA-BV; Fri, 03 Mar 2023 22:37:31 +0100 From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: Krzysztof Kozlowski , Wim Van Sebroeck , Guenter Roeck , Doug Anderson , Leela Krishna Amudala Cc: Alim Akhtar , linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-watchdog@vger.kernel.org, kernel@pengutronix.de Subject: [PATCH 01/34] watchdog: s3c2410: Don't skip cleanup in remove's error path Date: Fri, 3 Mar 2023 22:36:43 +0100 Message-Id: <20230303213716.2123717-2-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230303213716.2123717-1-u.kleine-koenig@pengutronix.de> References: <20230303213716.2123717-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1190; i=u.kleine-koenig@pengutronix.de; h=from:subject; bh=dH5K8jSqecnVYqdbPPG8j+uJBNtwI1UmMnEH81NXN2o=; b=owEBbQGS/pANAwAKAcH8FHityuwJAcsmYgBkAmgSDlZ9h3UXAn5MUbhKAXXOUHQmQQZBssmp9 ybpzz62ncCJATMEAAEKAB0WIQR+cioWkBis/z50pAvB/BR4rcrsCQUCZAJoEgAKCRDB/BR4rcrs CQKUCACesLXMrz4kUplOzOB+eOBKfnhFGAVh1/Lw/nAQfuyvdVV/xHHrJgU9VIvKm5t3HGQnqhB UOz7IPMuVr0tQ6vS+BVA/IFwum94L2lgwcOLzYMIQmvBFbZNG9LKDQp+VzvatcJRnhaj8drhjIm 0vks5wkawx6BfUQsCkWmKk7EVEvsrcNaw3fe3CLr622YCoD7OLVT0dto2YWJHn3C/6k7n49BD6M /ncSMYvsfECmFlEgzWwdfjZNUgQP/21sBIQja2xqKhW4DB5lp8DhzdFSDzH2aXoHJRgWqk81gdY eCzuBYAoeuW9A9QaDT00vN6LKHsqXtrcB3gIN5n/HReqcDEd X-Developer-Key: i=u.kleine-koenig@pengutronix.de; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-samsung-soc@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Returning early in a platform driver's remove callback is wrong. In this case the watchdog device is never removed although it's parent is gone which likely can trigger a use-after-free in sysfs. Also the two used clocks will never be disabled. Instead only warn if s3c2410wdt_enable() fails and cleanup. Note that returning 0 is the right thing to do then to suppress another warning message by the driver core. Fixes: 4f1f653a68d6 ("watchdog: s3c2410_wdt: use syscon regmap interface to configure pmu register") Signed-off-by: Uwe Kleine-König --- drivers/watchdog/s3c2410_wdt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c index 200ba236a72e..cf104a844a43 100644 --- a/drivers/watchdog/s3c2410_wdt.c +++ b/drivers/watchdog/s3c2410_wdt.c @@ -782,7 +782,8 @@ static int s3c2410wdt_remove(struct platform_device *dev) ret = s3c2410wdt_enable(wdt, false); if (ret < 0) - return ret; + dev_warn(&dev->dev, + "Failed to disable watchdog (%pe)\n", ERR_PTR(ret)); watchdog_unregister_device(&wdt->wdt_device); From patchwork Fri Mar 3 21:37:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= X-Patchwork-Id: 658901 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0681C7EE30 for ; Fri, 3 Mar 2023 21:37:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231879AbjCCVhr (ORCPT ); Fri, 3 Mar 2023 16:37:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48684 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231858AbjCCVhq (ORCPT ); Fri, 3 Mar 2023 16:37:46 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 331CA62D8D for ; Fri, 3 Mar 2023 13:37:45 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pYD5v-0000MI-Jj; Fri, 03 Mar 2023 22:37:39 +0100 Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pYD5u-001eCI-GX; Fri, 03 Mar 2023 22:37:38 +0100 Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pYD5t-001wyr-8Y; Fri, 03 Mar 2023 22:37:37 +0100 From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: Krzysztof Kozlowski , Wim Van Sebroeck , Guenter Roeck Cc: Alim Akhtar , linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-watchdog@vger.kernel.org, kernel@pengutronix.de Subject: [PATCH 28/34] watchdog: s3c2410: Convert to platform remove callback returning void Date: Fri, 3 Mar 2023 22:37:10 +0100 Message-Id: <20230303213716.2123717-29-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230303213716.2123717-1-u.kleine-koenig@pengutronix.de> References: <20230303213716.2123717-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1795; i=u.kleine-koenig@pengutronix.de; h=from:subject; bh=M+DN6Ffcu47NvDlJ71rx485DsQUZMI7Kl6vBiuQHIaI=; b=owEBbQGS/pANAwAKAcH8FHityuwJAcsmYgBkAmhx0CtjwFuTgZla7LkQRXk62OR+DTlQfjsgs mG811DGxLeJATMEAAEKAB0WIQR+cioWkBis/z50pAvB/BR4rcrsCQUCZAJocQAKCRDB/BR4rcrs CcLPCACUexN6C8auNnEIoxV3LNntl/LWc+Xs+y1CEHX5mk0o+qdS6522BqH2fFs9kH/g54KhAHM OyMzSl9wfsAtTHOqhDCQriOrPpI/3SJyKFu/I+ChBsnCvj0Iblk83vZl9rWB7bzVWsc97oUrrlu XmAFMOaiQ9aYBK1urau9B0JCsRtd6E2KRw2Hnz395cHzla1PfbqcoMfO8qtspD1BzFSgqZ86XmL C1smF2NYluWPaltuZUWWI+0SOCFPd7nisJe9/nCagzrAu3aOQeDsylRVkddnYuWEomkVGhSD9Z1 nFCRLRdBcoG6HiyAdxFNi/OMmqETdIwa6wO89swJgGbcG1vV X-Developer-Key: i=u.kleine-koenig@pengutronix.de; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-samsung-soc@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org The .remove() callback for a platform driver returns an int which makes many driver authors wrongly assume it's possible to do error handling by returning an error code. However the value returned is (mostly) ignored and this typically results in resource leaks. To improve here there is a quest to make the remove callback return void. In the first step of this quest all drivers are converted to .remove_new() which already returns void. Trivially convert this driver from always returning zero in the remove callback to the void returning variant. Signed-off-by: Uwe Kleine-König --- drivers/watchdog/s3c2410_wdt.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c index cf104a844a43..d1f408913843 100644 --- a/drivers/watchdog/s3c2410_wdt.c +++ b/drivers/watchdog/s3c2410_wdt.c @@ -775,7 +775,7 @@ static int s3c2410wdt_probe(struct platform_device *pdev) return ret; } -static int s3c2410wdt_remove(struct platform_device *dev) +static void s3c2410wdt_remove(struct platform_device *dev) { int ret; struct s3c2410_wdt *wdt = platform_get_drvdata(dev); @@ -789,8 +789,6 @@ static int s3c2410wdt_remove(struct platform_device *dev) clk_disable_unprepare(wdt->src_clk); clk_disable_unprepare(wdt->bus_clk); - - return 0; } static void s3c2410wdt_shutdown(struct platform_device *dev) @@ -845,7 +843,7 @@ static DEFINE_SIMPLE_DEV_PM_OPS(s3c2410wdt_pm_ops, static struct platform_driver s3c2410wdt_driver = { .probe = s3c2410wdt_probe, - .remove = s3c2410wdt_remove, + .remove_new = s3c2410wdt_remove, .shutdown = s3c2410wdt_shutdown, .id_table = s3c2410_wdt_ids, .driver = {