watchdog: Fix kref imbalance seen if handle_boot_enabled=0

"Linux Kernel Mailing List" <[email protected]>
Newsgroups gmane.linux.kernel.commits.head
Message-ID <[email protected]>
Web:        https://git.kernel.org/torvalds/c/914d65f3f013ba2556c7beec5d3baac7b3292504
Commit:     914d65f3f013ba2556c7beec5d3baac7b3292504
Parent:     4bcd615fad6adddc68b058d498b30a9e0e0db77a
Refname:    refs/heads/master
Author:     Guenter Roeck <[email protected]>
AuthorDate: Mon Sep 25 09:17:02 2017 -0700
Committer:  Wim Van Sebroeck <[email protected]>
CommitDate: Sun Dec 17 11:01:48 2017 +0100

    watchdog: Fix kref imbalance seen if handle_boot_enabled=0
    
    If handle_boot_enabled is set to 0, the watchdog driver module use
    counter will not be increased and kref_get() will not be called when
    registering the watchdog. Subsequently, on open, this does not happen
    either because the code believes that it was already done because the
    hardware watchdog is marked as running.
    
    We could introduce a state variable to indicate this state, but let's
    just increase the module use counter and call kref_get() unconditionally
    if the hardware watchdog is running when a driver is registering itself
    to keep the code simple.
    
    Fixes: 2501b015313fe ("watchdog: core: add option to avoid early ...")
    Cc: Sebastian Reichel <[email protected]>
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Wim Van Sebroeck <[email protected]>
---
 drivers/watchdog/watchdog_dev.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
index 12fe47d8237b..95b96f3cb36f 100644
--- a/drivers/watchdog/watchdog_dev.c
+++ b/drivers/watchdog/watchdog_dev.c
@@ -967,14 +967,13 @@ static int watchdog_cdev_register(struct watchdog_device *wdd, dev_t devno)
 	 * and schedule an immediate ping.
 	 */
 	if (watchdog_hw_running(wdd)) {
-		if (handle_boot_enabled) {
-			__module_get(wdd->ops->owner);
-			kref_get(&wd_data->kref);
+		__module_get(wdd->ops->owner);
+		kref_get(&wd_data->kref);
+		if (handle_boot_enabled)
 			queue_delayed_work(watchdog_wq, &wd_data->work, 0);
-		} else {
+		else
 			pr_info("watchdog%d running and kernel based pre-userspace handler disabled\n",
-					wdd->id);
-		}
+				wdd->id);
 	}
 
 	return 0;
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.