• Ard Biesheuvel's avatar
    efi/arm: Fix boot crash with CONFIG_CPUMASK_OFFSTACK=y · d1eb9814
    Ard Biesheuvel authored
    On ARM and arm64, we use a dedicated mm_struct to map the UEFI
    Runtime Services regions, which allows us to map those regions
    on demand, and in a way that is guaranteed to be compatible
    with incoming kernels across kexec.
    
    As it turns out, we don't fully initialize the mm_struct in the
    same way as process mm_structs are initialized on fork(), which
    results in the following crash on ARM if CONFIG_CPUMASK_OFFSTACK=y
    is enabled:
    
      ...
      EFI Variables Facility v0.08 2004-May-17
      Unable to handle kernel NULL pointer dereference at virtual address 00000000
      [...]
      Process swapper/0 (pid: 1)
      ...
      __memzero()
      check_and_switch_context()
      virt_efi_get_next_variable()
      efivar_init()
      efivars_sysfs_init()
      do_one_initcall()
      ...
    
    This is due to a missing call to mm_init_cpumask(), so add it.
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: <stable@vger.kernel.org> # v4.5+
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Matt Fleming <matt@codeblueprint.co.uk>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/1488395154-29786-1-git-send-email-ard.biesheuvel@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    d1eb9814
arm-runtime.c 3.86 KB