Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5bd0190b authored by David Gibson's avatar David Gibson Committed by Linus Torvalds
Browse files

[PATCH] Fix crash when ptrace poking hugepage areas



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: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Acked-by: default avatarWilliam Irwin <wli@holomorphy.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent df69a60d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -241,6 +241,7 @@ int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, in
		if (write) {
			copy_to_user_page(vma, page, addr,
					  maddr + offset, buf, bytes);
			if (!PageCompound(page))
				set_page_dirty_lock(page);
		} else {
			copy_from_user_page(vma, page, addr,