[PATCH] mm: usercopy: move the virt_addr_valid() below the is_vmalloc_addr()

From: Yuanzheng Song
Date: Thu May 05 2022 - 02:52:24 EST


The is_kmap_addr() and the is_vmalloc_addr() in the check_heap_object()
will not work, because the virt_addr_valid() will exclude the kmap and
vmalloc regions. So let's move the virt_addr_valid() below
the is_vmalloc_addr().

Signed-off-by: Yuanzheng Song <songyuanzheng@xxxxxxxxxx>
---
mm/usercopy.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/mm/usercopy.c b/mm/usercopy.c
index ac8a093e90c1..baeacc735b83 100644
--- a/mm/usercopy.c
+++ b/mm/usercopy.c
@@ -163,9 +163,6 @@ static inline void check_heap_object(const void *ptr, unsigned long n,
{
struct folio *folio;

- if (!virt_addr_valid(ptr))
- return;
-
if (is_kmap_addr(ptr)) {
unsigned long page_end = (unsigned long)ptr | (PAGE_SIZE - 1);

@@ -190,6 +187,9 @@ static inline void check_heap_object(const void *ptr, unsigned long n,
return;
}

+ if (!virt_addr_valid(ptr))
+ return;
+
folio = virt_to_folio(ptr);

if (folio_test_slab(folio)) {
--
2.25.1