All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wu Fengguang <fengguang.wu@intel.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>, Andi Kleen <ak@linux.intel.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: "Wu, Fengguang" <fengguang.wu@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Nick Piggin <npiggin@suse.de>,
	Hugh Dickins <hugh.dickins@tiscali.co.uk>,
	Andi Kleen <andi@firstfloor.org>,
	"riel@redhat.com" <riel@redhat.com>,
	"chris.mason@oracle.com" <chris.mason@oracle.com>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>
Subject: [PATCH 13/22] HWPOISON: Add madvise() based injector for hardware poisoned pages v3
Date: Mon, 15 Jun 2009 10:45:33 +0800	[thread overview]
Message-ID: <20090615031254.168416512@intel.com> (raw)
In-Reply-To: 20090615024520.786814520@intel.com

[-- Attachment #1: mf-inject-madvise --]
[-- Type: text/plain, Size: 2854 bytes --]

From: Andi Kleen <ak@linux.intel.com>

Impact: optional, useful for debugging

Add a new madvice sub command to inject poison for some
pages in a process' address space.  This is useful for
testing the poison page handling.

Open issues:

- This patch allows root to tie up arbitary amounts of memory.
Should this be disabled inside containers?
- There's a small race window between getting the page and injecting.
The patch drops the ref count because otherwise memory_failure
complains about dangling references. In theory with a multi threaded
injector one could inject poison for a process foreign page this way.
Not a serious issue right now.

v2: Use write flag for get_user_pages to make sure to always get
a fresh page
v3: Don't request write mapping (Fengguang Wu)

Reviewed-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>

---
 include/asm-generic/mman-common.h |    1 
 mm/madvise.c                      |   36 ++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

--- sound-2.6.orig/mm/madvise.c
+++ sound-2.6/mm/madvise.c
@@ -207,6 +207,38 @@ static long madvise_remove(struct vm_are
 	return error;
 }
 
+#ifdef CONFIG_MEMORY_FAILURE
+/*
+ * Error injection support for memory error handling.
+ */
+static int madvise_hwpoison(unsigned long start, unsigned long end)
+{
+	/*
+	 * RED-PEN
+	 * This allows to tie up arbitary amounts of memory.
+	 * Might be a good idea to disable it inside containers even for root.
+	 */
+	if (!capable(CAP_SYS_ADMIN))
+		return -EPERM;
+	for (; start < end; start += PAGE_SIZE) {
+		struct page *p;
+		int ret = get_user_pages(current, current->mm, start, 1,
+						0, 0, &p, NULL);
+		if (ret != 1)
+			return ret;
+		put_page(p);
+		/*
+		 * RED-PEN page can be reused in a short window, but otherwise
+		 * we'll have to fight with the reference count.
+		 */
+		printk(KERN_INFO "Injecting memory failure for page %lx at %lx\n",
+		       page_to_pfn(p), start);
+		memory_failure(page_to_pfn(p), 0);
+	}
+	return 0;
+}
+#endif
+
 static long
 madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev,
 		unsigned long start, unsigned long end, int behavior)
@@ -307,6 +339,10 @@ SYSCALL_DEFINE3(madvise, unsigned long, 
 	int write;
 	size_t len;
 
+#ifdef CONFIG_MEMORY_FAILURE
+	if (behavior == MADV_HWPOISON)
+		return madvise_hwpoison(start, start+len_in);
+#endif
 	if (!madvise_behavior_valid(behavior))
 		return error;
 
--- sound-2.6.orig/include/asm-generic/mman-common.h
+++ sound-2.6/include/asm-generic/mman-common.h
@@ -34,6 +34,7 @@
 #define MADV_REMOVE	9		/* remove these pages & resources */
 #define MADV_DONTFORK	10		/* don't inherit across fork */
 #define MADV_DOFORK	11		/* do inherit across fork */
+#define MADV_HWPOISON	12		/* poison a page for testing */
 
 /* compatibility flags */
 #define MAP_FILE	0

-- 


WARNING: multiple messages have this Message-ID (diff)
From: Wu Fengguang <fengguang.wu@intel.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Andi Kleen <ak@linux.intel.com>, Ingo Molnar <mingo@elte.hu>,
	Mel Gorman <mel@csn.ul.ie>,
	"Wu, Fengguang" <fengguang.wu@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Nick Piggin <npiggin@suse.de>,
	Hugh Dickins <hugh.dickins@tiscali.co.uk>,
	Andi Kleen <andi@firstfloor.org>,
	"riel@redhat.com" <riel@redhat.com>,
	"chris.mason@oracle.com" <chris.mason@oracle.com>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>
Subject: [PATCH 13/22] HWPOISON: Add madvise() based injector for hardware poisoned pages v3
Date: Mon, 15 Jun 2009 10:45:33 +0800	[thread overview]
Message-ID: <20090615031254.168416512@intel.com> (raw)
In-Reply-To: 20090615024520.786814520@intel.com

[-- Attachment #1: mf-inject-madvise --]
[-- Type: text/plain, Size: 3079 bytes --]

From: Andi Kleen <ak@linux.intel.com>

Impact: optional, useful for debugging

Add a new madvice sub command to inject poison for some
pages in a process' address space.  This is useful for
testing the poison page handling.

Open issues:

- This patch allows root to tie up arbitary amounts of memory.
Should this be disabled inside containers?
- There's a small race window between getting the page and injecting.
The patch drops the ref count because otherwise memory_failure
complains about dangling references. In theory with a multi threaded
injector one could inject poison for a process foreign page this way.
Not a serious issue right now.

v2: Use write flag for get_user_pages to make sure to always get
a fresh page
v3: Don't request write mapping (Fengguang Wu)

Reviewed-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>

---
 include/asm-generic/mman-common.h |    1 
 mm/madvise.c                      |   36 ++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

--- sound-2.6.orig/mm/madvise.c
+++ sound-2.6/mm/madvise.c
@@ -207,6 +207,38 @@ static long madvise_remove(struct vm_are
 	return error;
 }
 
+#ifdef CONFIG_MEMORY_FAILURE
+/*
+ * Error injection support for memory error handling.
+ */
+static int madvise_hwpoison(unsigned long start, unsigned long end)
+{
+	/*
+	 * RED-PEN
+	 * This allows to tie up arbitary amounts of memory.
+	 * Might be a good idea to disable it inside containers even for root.
+	 */
+	if (!capable(CAP_SYS_ADMIN))
+		return -EPERM;
+	for (; start < end; start += PAGE_SIZE) {
+		struct page *p;
+		int ret = get_user_pages(current, current->mm, start, 1,
+						0, 0, &p, NULL);
+		if (ret != 1)
+			return ret;
+		put_page(p);
+		/*
+		 * RED-PEN page can be reused in a short window, but otherwise
+		 * we'll have to fight with the reference count.
+		 */
+		printk(KERN_INFO "Injecting memory failure for page %lx at %lx\n",
+		       page_to_pfn(p), start);
+		memory_failure(page_to_pfn(p), 0);
+	}
+	return 0;
+}
+#endif
+
 static long
 madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev,
 		unsigned long start, unsigned long end, int behavior)
@@ -307,6 +339,10 @@ SYSCALL_DEFINE3(madvise, unsigned long, 
 	int write;
 	size_t len;
 
+#ifdef CONFIG_MEMORY_FAILURE
+	if (behavior == MADV_HWPOISON)
+		return madvise_hwpoison(start, start+len_in);
+#endif
 	if (!madvise_behavior_valid(behavior))
 		return error;
 
--- sound-2.6.orig/include/asm-generic/mman-common.h
+++ sound-2.6/include/asm-generic/mman-common.h
@@ -34,6 +34,7 @@
 #define MADV_REMOVE	9		/* remove these pages & resources */
 #define MADV_DONTFORK	10		/* don't inherit across fork */
 #define MADV_DOFORK	11		/* do inherit across fork */
+#define MADV_HWPOISON	12		/* poison a page for testing */
 
 /* compatibility flags */
 #define MAP_FILE	0

-- 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2009-06-15  3:17 UTC|newest]

Thread overview: 158+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-15  2:45 [PATCH 00/22] HWPOISON: Intro (v5) Wu Fengguang
2009-06-15  2:45 ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 01/22] HWPOISON: Add page flag for poisoned pages Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 02/22] HWPOISON: Export some rmap vma locking to outside world Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 03/22] HWPOISON: Add support for poison swap entries v2 Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 04/22] HWPOISON: Add new SIGBUS error codes for hardware poison signals Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 05/22] HWPOISON: Add basic support for poisoned pages in fault handler v3 Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 06/22] HWPOISON: x86: Add VM_FAULT_HWPOISON handling to x86 page fault handler v2 Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 07/22] HWPOISON: define VM_FAULT_HWPOISON to 0 when feature is disabled Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 08/22] HWPOISON: Use bitmask/action code for try_to_unmap behaviour Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 09/22] HWPOISON: Handle hardware poisoned pages in try_to_unmap Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15 13:09   ` Minchan Kim
2009-06-15 13:09     ` Minchan Kim
2009-06-15 15:26     ` Wu Fengguang
2009-06-15 15:26       ` Wu Fengguang
2009-06-16  0:03       ` Minchan Kim
2009-06-16  0:03         ` Minchan Kim
2009-06-16 13:49         ` Wu Fengguang
2009-06-16 13:49           ` Wu Fengguang
2009-06-17  0:28           ` Minchan Kim
2009-06-17  0:28             ` Minchan Kim
2009-06-17  7:23             ` Wu Fengguang
2009-06-17  7:23               ` Wu Fengguang
2009-06-17 13:27               ` Minchan Kim
2009-06-17 13:27                 ` Minchan Kim
2009-06-17 13:37                 ` Wu Fengguang
2009-06-17 13:37                   ` Wu Fengguang
2009-06-17 13:43                   ` Minchan Kim
2009-06-17 13:43                     ` Minchan Kim
2009-06-17 14:03                     ` Wu Fengguang
2009-06-17 14:03                       ` Wu Fengguang
2009-06-17 14:08                       ` Minchan Kim
2009-06-17 14:08                         ` Minchan Kim
2009-06-17 14:12                         ` Wu Fengguang
2009-06-17 14:12                           ` Wu Fengguang
     [not found]               ` <28c262360906170644w65c08a8y2d2805fb08045804@mail.gmail.com>
     [not found]                 ` <20090617135543.GA8079@localhost>
     [not found]                   ` <28c262360906170703h3363b68dp74471358f647921e@mail.gmail.com>
2009-06-18 12:14                     ` Wu Fengguang
2009-06-18 12:14                       ` Wu Fengguang
2009-06-18 13:31                       ` Minchan Kim
2009-06-18 13:31                         ` Minchan Kim
2009-06-19  1:58                         ` Wu Fengguang
2009-06-19  1:58                           ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 10/22] HWPOISON: check and isolate corrupted free pages v2 Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  9:41   ` KAMEZAWA Hiroyuki
2009-06-15  9:41     ` KAMEZAWA Hiroyuki
2009-06-15 10:16     ` Wu Fengguang
2009-06-15 10:16       ` Wu Fengguang
2009-06-15 23:52       ` KAMEZAWA Hiroyuki
2009-06-15 23:52         ` KAMEZAWA Hiroyuki
2009-06-16  0:34         ` Wu Fengguang
2009-06-16  0:34           ` Wu Fengguang
2009-06-16 11:29           ` Hugh Dickins
2009-06-16 11:29             ` Hugh Dickins
2009-06-16 11:40             ` Wu Fengguang
2009-06-16 11:40               ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 11/22] HWPOISON: Refactor truncate to allow direct truncating of page v3 Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 12/22] HWPOISON: The high level memory error handler in the VM v7 Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` Wu Fengguang [this message]
2009-06-15  2:45   ` [PATCH 13/22] HWPOISON: Add madvise() based injector for hardware poisoned pages v3 Wu Fengguang
2009-06-15  2:45 ` [PATCH 14/22] HWPOISON: Add simple debugfs interface to inject hwpoison on arbitary PFNs Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 15/22] HWPOISON: early kill cleanups and fixes Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 16/22] mm: move page flag numbers for user space to page-flags.h Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 17/22] HWPOISON: introduce struct hwpoison_control Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 18/22] HWPOISON: use compound head page Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 19/22] HWPOISON: detect free buddy pages explicitly Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 20/22] HWPOISON: collect infos that reflect the impact of the memory corruption Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  2:45 ` [PATCH 21/22] HWPOISON: send uevent to report " Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  6:29   ` Andi Kleen
2009-06-15  6:29     ` Andi Kleen
2009-06-15  9:56     ` Wu Fengguang
2009-06-15  9:56       ` Wu Fengguang
2009-06-16  0:35   ` Greg KH
2009-06-16  0:35     ` Greg KH
2009-06-15  2:45 ` [PATCH 22/22] HWPOISON: FOR TESTING: Enable memory failure code unconditionally Wu Fengguang
2009-06-15  2:45   ` Wu Fengguang
2009-06-15  3:18 ` [PATCH 00/22] HWPOISON: Intro (v5) Balbir Singh
2009-06-15  3:18   ` Balbir Singh
2009-06-15  4:27   ` Wu Fengguang
2009-06-15  4:27     ` Wu Fengguang
2009-06-15  6:44     ` Nick Piggin
2009-06-15  6:44       ` Nick Piggin
2009-06-15  7:09       ` Andi Kleen
2009-06-15  7:09         ` Andi Kleen
2009-06-15  7:19         ` Nick Piggin
2009-06-15  7:19           ` Nick Piggin
2009-06-15 12:10           ` Wu Fengguang
2009-06-15 12:10             ` Wu Fengguang
2009-06-15 12:25             ` Nick Piggin
2009-06-15 12:25               ` Nick Piggin
2009-06-15 14:22               ` Wu Fengguang
2009-06-15 14:22                 ` Wu Fengguang
2009-06-17  6:37                 ` [RFC][PATCH] HWPOISON: only early kill processes who installed SIGBUS handler Wu Fengguang
2009-06-17  6:37                   ` Wu Fengguang
2009-06-17  8:04                   ` Nick Piggin
2009-06-17  8:04                     ` Nick Piggin
2009-06-17  9:55                     ` Wu Fengguang
2009-06-17  9:55                       ` Wu Fengguang
2009-06-17 10:00                       ` Nick Piggin
2009-06-17 10:00                         ` Nick Piggin
2009-06-17 11:56                         ` Wu Fengguang
2009-06-17 11:56                           ` Wu Fengguang
2009-06-18  9:56                     ` Wu Fengguang
2009-06-18  9:56                       ` Wu Fengguang
2009-06-15  8:14       ` [PATCH 00/22] HWPOISON: Intro (v5) Nick Piggin
2009-06-15  8:14         ` Nick Piggin
2009-06-15 10:09         ` Wu Fengguang
2009-06-15 10:09           ` Wu Fengguang
2009-06-15 10:36           ` Nick Piggin
2009-06-15 10:36             ` Nick Piggin
2009-06-15 11:41             ` Wu Fengguang
2009-06-15 11:41               ` Wu Fengguang
2009-06-15 12:51     ` Hugh Dickins
2009-06-15 12:51       ` Hugh Dickins
2009-06-15 13:00       ` Alan Cox
2009-06-15 13:00         ` Alan Cox
2009-06-15 13:29         ` Andi Kleen
2009-06-15 13:29           ` Andi Kleen
2009-06-15 13:28           ` H. Peter Anvin
2009-06-15 13:28             ` H. Peter Anvin
2009-06-15 14:48           ` Alan Cox
2009-06-15 14:48             ` Alan Cox
2009-06-15 15:24             ` Andi Kleen
2009-06-15 15:24               ` Andi Kleen
2009-06-15 15:28               ` Alan Cox
2009-06-15 15:28                 ` Alan Cox
2009-06-15 16:19                 ` Andi Kleen
2009-06-15 16:19                   ` Andi Kleen
2009-06-15 16:28                   ` Alan Cox
2009-06-15 16:28                     ` Alan Cox
2009-06-15 17:07                     ` Andi Kleen
2009-06-15 17:07                       ` Andi Kleen
2009-06-16 19:44           ` Russ Anderson
2009-06-16 19:44             ` Russ Anderson
2009-06-16 20:28             ` H. Peter Anvin
2009-06-16 20:28               ` H. Peter Anvin
2009-06-16 20:54               ` Russ Anderson
2009-06-16 20:54                 ` Russ Anderson
2009-06-16 20:58                 ` H. Peter Anvin
2009-06-16 20:58                   ` H. Peter Anvin

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=20090615031254.168416512@intel.com \
    --to=fengguang.wu@intel.com \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.