From: Miles Chen <miles.c...@mediatek.com>

[ Upstream commit c8f61cfc871fadfb73ad3eacd64fda457279e911 ]

The (root-only) page owner read might allocate a large size of memory with
a large read count.  Allocation fails can easily occur when doing high
order allocations.

Clamp buffer size to PAGE_SIZE to avoid arbitrary size allocation
and avoid allocation fails due to high order allocation.

[a...@linux-foundation.org: use min_t()]
Link: 
http://lkml.kernel.org/r/1541091607-27402-1-git-send-email-miles.c...@mediatek.com
Signed-off-by: Miles Chen <miles.c...@mediatek.com>
Acked-by: Michal Hocko <mho...@suse.com>
Cc: Joe Perches <j...@perches.com>
Cc: Matthew Wilcox <wi...@infradead.org>
Signed-off-by: Andrew Morton <a...@linux-foundation.org>
Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 mm/page_owner.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/mm/page_owner.c b/mm/page_owner.c
index d80adfe702d3..9ad588444671 100644
--- a/mm/page_owner.c
+++ b/mm/page_owner.c
@@ -351,6 +351,7 @@ print_page_owner(char __user *buf, size_t count, unsigned 
long pfn,
                .skip = 0
        };
 
+       count = min_t(size_t, count, PAGE_SIZE);
        kbuf = kmalloc(count, GFP_KERNEL);
        if (!kbuf)
                return -ENOMEM;
-- 
2.19.1

Reply via email to