Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755332AbbKCQPO (ORCPT ); Tue, 3 Nov 2015 11:15:14 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44443 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751504AbbKCPQp (ORCPT ); Tue, 3 Nov 2015 10:16:45 -0500 From: Ulrich Obergfell 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 Message-Id: <1446564061-3379-2-git-send-email-uobergfe@redhat.com> In-Reply-To: <1446564061-3379-1-git-send-email-uobergfe@redhat.com> References: <1446564061-3379-1-git-send-email-uobergfe@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1445 Lines: 44 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 --- 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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/