ANDROID: arm64: check for upper PAGE_SHIFT bits in pfn_valid()
authorGreg Hackmann <ghackmann@google.com>
Thu, 28 Aug 2014 21:00:10 +0000 (14:00 -0700)
committerAmit Pundir <amit.pundir@linaro.org>
Mon, 18 Dec 2017 15:41:22 +0000 (21:11 +0530)
commit04742a7b495e3c4344941bdf2e2c642d94149435
tree80116265bbda12a183f3e375c4ac176b2bd419e9
parent92fe43eb76ed31714d967478851d4d4031a473be
ANDROID: arm64: check for upper PAGE_SHIFT bits in pfn_valid()

pfn_valid() returns a false positive when the lower (64 - PAGE_SHIFT)
bits match a valid pfn but some of the upper bits are set.  This caused
a kernel panic in kpageflags_read() when a userspace utility parsed
/proc/*/pagemap, neglected to discard the upper flag bits, and tried to
lseek()+read() from the corresponding offset in /proc/kpageflags.

A valid pfn will never have the upper PAGE_SHIFT bits set, so simply
check for this before passing the pfn to memblock_is_memory().

Change-Id: Ief5d8cd4dd93cbecd545a634a8d5885865cb5970
Signed-off-by: Greg Hackmann <ghackmann@google.com>
arch/arm64/mm/init.c