[PATCH 1/2] arm64: mm: detect bad __create_mapping uses
steve.capper at linaro.org
Fri Nov 20 08:13:28 PST 2015
On 20 November 2015 at 15:35, Mark Rutland <mark.rutland at arm.com> wrote:
> If a caller of __create_mapping provides a PA and VA which have
> different sub-page offsets, it is not clear which offset they expect to
> apply to the mapping, and is indicative of a bad caller.
> Disallow calls with differing sub-page offsets, and WARN when they are
> encountered, so that we can detect and fix such cases.
> Signed-off-by: Mark Rutland <mark.rutland at arm.com>
> Cc: Ard Biesheuvel <ard.biesheuvel at linaro.org>
> Cc: Catalin Marinas <caralin.marinas at arm.com>
> Cc: Laura Abbott <labbott at fedoraproject.org>
> Cc: Steve Capper <steve.capper at linaro.org>
> Cc: Will Deacon <will.deacon at arm.com>
> arch/arm64/mm/mmu.c | 7 +++++++
> 1 file changed, 7 insertions(+)
> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> index e3f563c..3b06afa 100644
> --- a/arch/arm64/mm/mmu.c
> +++ b/arch/arm64/mm/mmu.c
> @@ -300,6 +300,13 @@ static void __create_mapping(struct mm_struct *mm, pgd_t *pgd,
> unsigned long addr, length, end, next;
> + /*
> + * If the virtual and physical address don't have the same offset
> + * within a page, we cannot map the region as the caller expects.
> + */
> + if (WARN_ON((phys ^ virt) & ~PAGE_MASK))
> + return;
Do we want any subpage offsets in our virt and phys?
If we have sub page bits in phys won't that start flipping on bits in
the page table entries?
What about something like:
if (WARN_ON((phys | virt) & ~PAGE_MASK))
> addr = virt & PAGE_MASK;
> length = PAGE_ALIGN(size + (virt & ~PAGE_MASK));
More information about the linux-arm-kernel