lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Mon,  2 Mar 2020 16:46:21 +0800
From:   luanshi <zhangliguang@...ux.alibaba.com>
To:     Wim Van Sebroeck <wim@...ux-watchdog.org>,
        Guenter Roeck <linux@...ck-us.net>
Cc:     linux-watchdog@...r.kernel.org, linux-kernel@...r.kernel.org,
        luanshi <zhangliguang@...ux.alibaba.com>
Subject: [PATCH] watchdog: sbsa_gwdt: disable watchdog when system panic was trigged by signal WS0

When ARM SBSA Generic Watchdog worked in the two stages mode by setting
module parameter action to 1, when the timeout is reached, the first
signal (WS0) will trigger panic. Before panic, the value of register
SBSA_GWDT_WCS was 0x0, after panic and system startup, the value of
register SBSA_GWDT_WCS was 0x7, status bits SBSA_GWDT_WCS_EN
SBSA_GWDT_WCS_WS0 and SBSA_GWDT_WCS_WS1 were set, this will increase the
refcnt of module sbsa_gwdt by function watchdog_cdev_register because
flag WDOG_HW_RUNNING was set, so we cannot unload the module again. To be
consistent with reboot, watchdog should be disabled when system panic was
trigged by signal(WS0).

Signed-off-by: Liguang Zhang <zhangliguang@...ux.alibaba.com>
---
 drivers/watchdog/sbsa_gwdt.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/watchdog/sbsa_gwdt.c b/drivers/watchdog/sbsa_gwdt.c
index f0f1e3b..6bee5bb 100644
--- a/drivers/watchdog/sbsa_gwdt.c
+++ b/drivers/watchdog/sbsa_gwdt.c
@@ -194,6 +194,12 @@ static int sbsa_gwdt_stop(struct watchdog_device *wdd)
 
 static irqreturn_t sbsa_gwdt_interrupt(int irq, void *dev_id)
 {
+	struct sbsa_gwdt *gwdt = (struct sbsa_gwdt *)dev_id;
+	struct watchdog_device *wdd = &gwdt->wdd;
+
+	if (wdd->ops->stop)
+		wdd->ops->stop(wdd);
+
 	panic(WATCHDOG_NAME " timeout");
 
 	return IRQ_HANDLED;
-- 
1.8.3.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ