public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ulrich Obergfell <uobergfe@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: akpm@linux-foundation.org, dzickus@redhat.com,
	atomlin@redhat.com, uobergfe@redhat.com
Subject: [PATCH 1/4] watchdog: avoid race between lockup detector suspend/resume and CPU hotplug
Date: Tue,  3 Nov 2015 16:20:58 +0100	[thread overview]
Message-ID: <1446564061-3379-2-git-send-email-uobergfe@redhat.com> (raw)
In-Reply-To: <1446564061-3379-1-git-send-email-uobergfe@redhat.com>

The lockup detector suspend/resume interface that was introduced by
commit 8c073d27d7ad293bf734cc8475689413afadab81 does not protect
itself against races with CPU hotplug. Hence, theoretically it is
possible that a new watchdog thread is started on a hotplugged CPU
while the lockup detector is suspended, and the thread could thus
interfere unexpectedly with the code that requested to suspend the
lockup detector. Avoid the race by calling

  get_online_cpus() in lockup_detector_suspend()
  put_online_cpus() in lockup_detector_resume()

Signed-off-by: Ulrich Obergfell <uobergfe@redhat.com>
---
 kernel/watchdog.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index 0a23125..7357842 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -719,6 +719,7 @@ int lockup_detector_suspend(void)
 {
 	int ret = 0;
 
+	get_online_cpus();
 	mutex_lock(&watchdog_proc_mutex);
 	/*
 	 * Multiple suspend requests can be active in parallel (counted by
@@ -759,6 +760,7 @@ void lockup_detector_resume(void)
 		watchdog_unpark_threads();
 
 	mutex_unlock(&watchdog_proc_mutex);
+	put_online_cpus();
 }
 
 static int update_watchdog_all_cpus(void)
-- 
1.7.11.7


  reply	other threads:[~2015-11-03 16:15 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-03 15:20 [PATCH 0/4] watchdog: address various races (CPU hotplug, timer expiry) Ulrich Obergfell
2015-11-03 15:20 ` Ulrich Obergfell [this message]
2015-11-03 15:20 ` [PATCH 2/4] watchdog: avoid races between /proc handlers and CPU hotplug Ulrich Obergfell
2015-11-03 15:21 ` [PATCH 3/4] watchdog: remove {get|put}_online_cpus() from watchdog_{park|unpark}_threads() Ulrich Obergfell
2015-11-03 15:21 ` [PATCH 4/4] watchdog: fix race between proc_watchdog_thresh() and watchdog_timer_fn() Ulrich Obergfell
2015-11-05 14:46 ` [PATCH 0/4] watchdog: address various races (CPU hotplug, timer expiry) Don Zickus
2015-11-05 20:50 ` Aaron Tomlin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1446564061-3379-2-git-send-email-uobergfe@redhat.com \
    --to=uobergfe@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=atomlin@redhat.com \
    --cc=dzickus@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox