@@ -101,7 +101,7 @@ __copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
atomic = faulthandler_disabled();
if (!atomic)
- mmap_read_lock(current->mm);
+ mmap_write_lock(current->mm);
while (n) {
pte_t *pte;
spinlock_t *ptl;
@@ -109,11 +109,11 @@ __copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
while (!pin_page_for_write(to, &pte, &ptl)) {
if (!atomic)
- mmap_read_unlock(current->mm);
+ mmap_write_unlock(current->mm);
if (__put_user(0, (char __user *)to))
goto out;
if (!atomic)
- mmap_read_lock(current->mm);
+ mmap_write_lock(current->mm);
}
tocopy = (~(unsigned long)to & ~PAGE_MASK) + 1;
@@ -133,7 +133,7 @@ __copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
spin_unlock(ptl);
}
if (!atomic)
- mmap_read_unlock(current->mm);
+ mmap_write_unlock(current->mm);
out:
return n;
The way I understand this, the copy_to_user would require the use of the mmap_*write*_lock variants, since this functions writes to the user space pages? Cc: Chris Blake <chrisrblake93@gmail.com> Signed-off-by: Christian Lamparter <chunkeey@gmail.com> --- arch/arm/lib/uaccess_with_memcpy.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)