Thread (32 messages) 32 messages, 7 authors, 2018-08-06
STALE2856d
Revisions (24)
  1. rfc [diff vs current]
  2. v2 [diff vs current]
  3. v2 [diff vs current]
  4. v1 [diff vs current]
  5. v1 [diff vs current]
  6. v2 [diff vs current]
  7. v2 [diff vs current]
  8. v3 [diff vs current]
  9. v4 current
  10. v5 [diff vs current]
  11. v6 [diff vs current]
  12. v7 [diff vs current]
  13. v8 [diff vs current]
  14. v9 [diff vs current]
  15. v10 [diff vs current]
  16. v11 [diff vs current]
  17. v12 [diff vs current]
  18. v13 [diff vs current]
  19. v14 [diff vs current]
  20. v15 [diff vs current]
  21. v16 [diff vs current]
  22. v17 [diff vs current]
  23. v18 [diff vs current]
  24. v19 [diff vs current]

[PATCH v4 4/7] mm, arm64: untag user addresses in mm/gup.c

From: Andrey Konovalov <hidden>
Date: 2018-06-20 15:26:04
Also in: linux-arch, linux-doc, linux-kselftest, linux-mm, lkml
Subsystem: memory management, memory management - gup (get user pages), the rest · Maintainers: Andrew Morton, David Hildenbrand, Linus Torvalds

mm/gup.c provides a kernel interface that accepts user addresses and
manipulates user pages directly (for example get_user_pages, that is used
by the futex syscall). Here we also need to handle the case of tagged user
pointers.

Add untagging to gup.c functions that use user pointers for vma lookup.

Signed-off-by: Andrey Konovalov <redacted>
---
 mm/gup.c | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/mm/gup.c b/mm/gup.c
index b70d7ba7cc13..5bb351c91989 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -666,6 +666,8 @@ static long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
 	if (!nr_pages)
 		return 0;
 
+	start = untagged_addr(start);
+
 	VM_BUG_ON(!!pages != !!(gup_flags & FOLL_GET));
 
 	/*
@@ -820,6 +822,8 @@ int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
 	struct vm_area_struct *vma;
 	int ret, major = 0;
 
+	address = untagged_addr(address);
+
 	if (unlocked)
 		fault_flags |= FAULT_FLAG_ALLOW_RETRY;
 
-- 
2.18.0.rc1.244.gcf134e6275-goog
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help