--- /dev/null
+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);