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)
committerRom Lemarchand <romlem@android.com>
Fri, 29 Aug 2014 21:17:08 +0000 (21:17 +0000)
commitbf485e6f51d505bbe4ab5eaafcfe7789ec83e7ee
treee80ab6c8c3d387c94d7a7fadb4560f0cd7342cf1
parent820140883b83b548cd09151732ae783abc2976a0
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