]> Git Repo - linux.git/commitdiff
NOMMU: Use copy_*_user_page() in access_process_vm()
authorJie Zhang <[email protected]>
Wed, 6 Jan 2010 17:23:28 +0000 (17:23 +0000)
committerLinus Torvalds <[email protected]>
Thu, 7 Jan 2010 02:16:02 +0000 (18:16 -0800)
The MMU code uses the copy_*_user_page() variants in access_process_vm()
rather than copy_*_user() as the former includes an icache flush.  This
is important when doing things like setting software breakpoints with
gdb.  So switch the NOMMU code over to do the same.

This patch makes the reasonable assumption that copy_from_user_page()
won't fail - which is probably fine, as we've checked the VMA from which
we're copying is usable, and the copy is not allowed to cross VMAs.  The
one case where it might go wrong is if the VMA is a device rather than
RAM, and that device returns an error which - in which case rubbish will
be returned rather than EIO.

Signed-off-by: Jie Zhang <[email protected]>
Signed-off-by: Mike Frysinger <[email protected]>
Signed-off-by: David Howells <[email protected]>
Acked-by: David McCullough <[email protected]>
Acked-by: Paul Mundt <[email protected]>
Acked-by: Greg Ungerer <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
mm/nommu.c

index a8d17521624ab57b1066755d21a25bcc419550a5..17773862619b5334832b76a062411c830e90135b 100644 (file)
@@ -1921,9 +1921,11 @@ int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, in
 
                /* only read or write mappings where it is permitted */
                if (write && vma->vm_flags & VM_MAYWRITE)
-                       len -= copy_to_user((void *) addr, buf, len);
+                       copy_to_user_page(vma, NULL, addr,
+                                        (void *) addr, buf, len);
                else if (!write && vma->vm_flags & VM_MAYREAD)
-                       len -= copy_from_user(buf, (void *) addr, len);
+                       copy_from_user_page(vma, NULL, addr,
+                                           buf, (void *) addr, len);
                else
                        len = 0;
        } else {
This page took 0.052628 seconds and 4 git commands to generate.