summary refs log tree commit diff
path: root/mm/page_owner.c
diff options
context:
space:
mode:
authorMiles Chen <miles.chen@mediatek.com>2018-12-28 00:33:21 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2018-12-28 12:11:46 -0800
commitc8f61cfc871fadfb73ad3eacd64fda457279e911 (patch)
treee66a7f8da6dc30887b8ab19afa71127a0493a84d /mm/page_owner.c
parent4e45f712d82c6b7a37e02faf388173ad12ab464d (diff)
downloadlinux-c8f61cfc871fadfb73ad3eacd64fda457279e911.tar.gz
mm/page_owner: clamp read count to PAGE_SIZE
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.

[akpm@linux-foundation.org: use min_t()]
Link: http://lkml.kernel.org/r/1541091607-27402-1-git-send-email-miles.chen@mediatek.com
Signed-off-by: Miles Chen <miles.chen@mediatek.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Joe Perches <joe@perches.com>
Cc: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/page_owner.c')
-rw-r--r--mm/page_owner.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/mm/page_owner.c b/mm/page_owner.c
index 87bc0dfdb52b..28b06524939f 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;