]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Add hugepages fix, fwd from akpm.
authorChris Wright <chrisw@osdl.org>
Wed, 30 Nov 2005 05:27:42 +0000 (21:27 -0800)
committerChris Wright <chrisw@osdl.org>
Wed, 30 Nov 2005 05:27:42 +0000 (21:27 -0800)
queue/fix-crash-when-ptrace-poking-hugepage-areas.patch [new file with mode: 0644]
queue/series

diff --git a/queue/fix-crash-when-ptrace-poking-hugepage-areas.patch b/queue/fix-crash-when-ptrace-poking-hugepage-areas.patch
new file mode 100644 (file)
index 0000000..7ba5b6e
--- /dev/null
@@ -0,0 +1,42 @@
+From stable-bounces@linux.kernel.org  Tue Nov 29 19:46:57 2005
+Date: Tue, 29 Nov 2005 19:46:37 -0800
+From: akpm@osdl.org
+To: stable@kernel.org
+Cc: wli@holomorphy.com, david@gibson.dropbear.id.au
+Subject: Fix crash when ptrace poking hugepage areas
+
+From: David Gibson <david@gibson.dropbear.id.au>
+
+set_page_dirty() will not cope with being handed a page * which is part of
+a compound page, but not the master page in that compound page.  This case
+can occur via access_process_vm() if you attemp to write to another
+process's hugepage memory area using ptrace() (causing an oops or hang).
+
+This patch fixes the bug by only calling set_page_dirty() from
+access_process_vm() if the page is not a compound page.  We already use a
+similar fix in bio_set_pages_dirty() for the case of direct io to
+hugepages.
+
+Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
+Acked-by: William Irwin <wli@holomorphy.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Chris Wright <chrisw@osdl.org>
+---
+
+ kernel/ptrace.c |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.14.y/kernel/ptrace.c
+===================================================================
+--- linux-2.6.14.y.orig/kernel/ptrace.c
++++ linux-2.6.14.y/kernel/ptrace.c
+@@ -238,7 +238,8 @@ int access_process_vm(struct task_struct
+               if (write) {
+                       copy_to_user_page(vma, page, addr,
+                                         maddr + offset, buf, bytes);
+-                      set_page_dirty_lock(page);
++                      if (!PageCompound(page))
++                              set_page_dirty_lock(page);
+               } else {
+                       copy_from_user_page(vma, page, addr,
+                                           buf, maddr + offset, bytes);
index 9b879d818c8f1e3cfabcaf9c565ca14f38836ee4..662591201cdbcb4477ec31207b108bfae1704657 100644 (file)
@@ -1,3 +1,4 @@
 dpt_i2o-fix-a-null-pointer-deref.patch
 message-i2o-pci-fix-null-pointer-deref.patch
 infiniband-fix-a-null-pointer-deref.patch
+fix-crash-when-ptrace-poking-hugepage-areas.patch