ARM: KVM: fix address validation for HYP mappings
authorMarc Zyngier <marc.zyngier@arm.com>
Sun, 28 Oct 2012 11:52:57 +0000 (11:52 +0000)
committerChristoffer Dall <cdall@cs.columbia.edu>
Wed, 6 Mar 2013 23:48:44 +0000 (15:48 -0800)
commitb4034bde5f168f2383a54b4573e1e440dbc169cf
tree04504f235132f1ac109b58efecc5c5f049374e28
parent06e8c3b0f3210e5e7039fd2b5e3926b68df7f5d7
ARM: KVM: fix address validation for HYP mappings

__create_hyp_mappings() performs some kind of address validation before
creating the mapping, by verifying that the start address is above
PAGE_OFFSET.

This check is not completely correct for kernel memory (the upper
boundary has to be checked as well so we do not end up with highmem
pages), and wrong for IO mappings (the mapping must exist in the vmalloc
region).

Fix this by using the proper predicates (virt_addr_valid and
is_vmalloc_addr), which also work correctly on ARM64 (where the vmalloc
region is below PAGE_OFFSET).

Also change the BUG_ON() into a less agressive error return.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm/kvm/mmu.c