[RFC PATCH] arm: use mmap_write_(un)lock for copy_to_user
Christian Lamparter
chunkeey at gmail.com
Mon Sep 7 18:17:04 EDT 2020
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 at gmail.com>
Signed-off-by: Christian Lamparter <chunkeey at gmail.com>
---
arch/arm/lib/uaccess_with_memcpy.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/lib/uaccess_with_memcpy.c b/arch/arm/lib/uaccess_with_memcpy.c
index 106f83a5ea6d..7491c13fdf0e 100644
--- a/arch/arm/lib/uaccess_with_memcpy.c
+++ b/arch/arm/lib/uaccess_with_memcpy.c
@@ -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;
--
2.28.0
More information about the linux-arm-kernel
mailing list