mm: usercopy: skip stack page span check
Kernel stack pages can span multiple pages and GFP_COMP is not
set for stack pages. Fix the false "spans multiple pages" error.
Change-Id: I2ba414be466b7c90fb4a3542237da809175e0590
Signed-off-by: Vinayak Menon <vinmenon@codeaurora.org>
[swatsrid@codeaurora.org: Fix trivial merge conflicts]
Signed-off-by: Swathi Sridhar <swatsrid@codeaurora.org>
diff --git a/mm/usercopy.c b/mm/usercopy.c
index 51411f9..ac85aeb 100644
--- a/mm/usercopy.c
+++ b/mm/usercopy.c
@@ -167,6 +167,8 @@
const void *end = ptr + n - 1;
struct page *endpage;
bool is_reserved, is_cma;
+ const void * const stack = task_stack_page(current);
+ const void * const stackend = stack + THREAD_SIZE;
/*
* Sometimes the kernel data regions are not marked Reserved (see
@@ -191,6 +193,10 @@
end <= (const void *)__bss_stop)
return;
+ /* Allow stack region to span multiple pages */
+ if (ptr >= stack && end <= stackend)
+ return;
+
/* Is the object wholly within one base page? */
if (likely(((unsigned long)ptr & (unsigned long)PAGE_MASK) ==
((unsigned long)end & (unsigned long)PAGE_MASK)))