Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1660325

[PATCH] md: don't use flush_signals in userspace processes

Path csiph.com!news.redatomik.org!aioe.org!bofh.it!news.nic.it!robomod
From Mikulas Patocka <mpatocka@redhat.com>
Newsgroups linux.kernel
Subject [PATCH] md: don't use flush_signals in userspace processes
Date Thu, 08 Jun 2017 01:10:03 +0200
Message-ID <tPSfp-4Fa-41@gated-at.bofh.it> (permalink)
Dmarc-Filter OpenDMARC Filter v1.3.2 mx1.redhat.com 23C71804EB
Authentication-Results ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
Authentication-Results ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=mpatocka@redhat.com
Dkim-Filter OpenDKIM Filter v2.11.0 mx1.redhat.com 23C71804EB
X-X-Sender mpatocka@file01.intranet.prod.int.rdu2.redhat.com
User-Agent Alpine 2.02 (LRH 1266 2009-07-14)
MIME-Version 1.0
Content-Type TEXT/PLAIN; charset=US-ASCII
X-Scanned-By MIMEDefang 2.79 on 10.5.11.13
X-Greylist Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 07 Jun 2017 23:05:35 +0000 (UTC)
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 65
Organization linux.* mail to news gateway
X-Original-Cc linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, Ingo Molnar <mingo@redhat.com>, Peter Zijlstra <peterz@infradead.org>
X-Original-Date Wed, 7 Jun 2017 19:05:31 -0400 (EDT)
X-Original-Message-ID <alpine.LRH.2.02.1706071834250.22850@file01.intranet.prod.int.rdu2.redhat.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1660325

Show key headers only | View raw


The function flush_signals clears all pending signals for the process. It
may be used by kernel threads when we need to prepare a kernel thread for
responding to signals. However using this function for an userspaces
processes is incorrect - clearing signals without the program expecting it
can cause misbehavior.

The raid1 and raid5 code uses flush_signals in its request routine because
it wants to prepare for an interruptible wait. This patch drops
flush_signals and uses sigprocmask instead to block all signals (including
SIGKILL) around the schedule() call. The signals are not lost, but the
schedule() call won't respond to them.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org

---
 drivers/md/raid1.c |    5 ++++-
 drivers/md/raid5.c |    5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

Index: linux-4.12-rc4/drivers/md/raid1.c
===================================================================
--- linux-4.12-rc4.orig/drivers/md/raid1.c
+++ linux-4.12-rc4/drivers/md/raid1.c
@@ -1335,7 +1335,7 @@ static void raid1_write_request(struct m
 		 */
 		DEFINE_WAIT(w);
 		for (;;) {
-			flush_signals(current);
+			sigset_t full, old;
 			prepare_to_wait(&conf->wait_barrier,
 					&w, TASK_INTERRUPTIBLE);
 			if (bio_end_sector(bio) <= mddev->suspend_lo ||
@@ -1345,7 +1345,10 @@ static void raid1_write_request(struct m
 				     bio->bi_iter.bi_sector,
 				     bio_end_sector(bio))))
 				break;
+			sigfillset(&full);
+			sigprocmask(SIG_BLOCK, &full, &old);
 			schedule();
+			sigprocmask(SIG_SETMASK, &old, NULL);
 		}
 		finish_wait(&conf->wait_barrier, &w);
 	}
Index: linux-4.12-rc4/drivers/md/raid5.c
===================================================================
--- linux-4.12-rc4.orig/drivers/md/raid5.c
+++ linux-4.12-rc4/drivers/md/raid5.c
@@ -5693,12 +5693,15 @@ static void raid5_make_request(struct md
 				 * userspace, we want an interruptible
 				 * wait.
 				 */
-				flush_signals(current);
 				prepare_to_wait(&conf->wait_for_overlap,
 						&w, TASK_INTERRUPTIBLE);
 				if (logical_sector >= mddev->suspend_lo &&
 				    logical_sector < mddev->suspend_hi) {
+					sigset_t full, old;
+					sigfillset(&full);
+					sigprocmask(SIG_BLOCK, &full, &old);
 					schedule();
+					sigprocmask(SIG_SETMASK, &old, NULL);
 					do_prepare = true;
 				}
 				goto retry;

Back to linux.kernel | Previous | NextNext in thread | Find similar | Unroll thread


Thread

[PATCH] md: don't use flush_signals in userspace processes Mikulas Patocka <mpatocka@redhat.com> - 2017-06-08 01:10 +0200
  Re: [PATCH] md: don't use flush_signals in userspace processes NeilBrown <neilb@suse.com> - 2017-06-08 09:00 +0200
    Re: [PATCH] md: don't use flush_signals in userspace processes Mikulas Patocka <mpatocka@redhat.com> - 2017-06-08 23:00 +0200
      Re: [PATCH] md: don't use flush_signals in userspace processes NeilBrown <neilb@suse.com> - 2017-06-08 23:30 +0200
        Re: [PATCH] md: don't use flush_signals in userspace processes Shaohua Li <shli@kernel.org> - 2017-06-09 01:00 +0200
          Re: [PATCH] md: don't use flush_signals in userspace processes NeilBrown <neilb@suse.com> - 2017-06-09 04:00 +0200
    Re: [PATCH] md: don't use flush_signals in userspace processes Mikulas Patocka <mpatocka@redhat.com> - 2017-06-09 01:00 +0200
      Re: [PATCH] md: don't use flush_signals in userspace processes NeilBrown <neilb@suse.com> - 2017-06-09 04:00 +0200
        Re: [PATCH] md: don't use flush_signals in userspace processes Henrique de Moraes Holschuh <hmh@hmh.eng.br> - 2017-06-09 05:30 +0200

csiph-web