• Maurizio Lombardi's avatar
    iscsi_ibft: fix crash due to KASLR physical memory remapping · 342f43af
    Maurizio Lombardi authored
    Starting with commit a799c2bd
    ("x86/setup: Consolidate early memory reservations")
    memory reservations have been moved earlier during the boot process,
    before the execution of the Kernel Address Space Layout Randomization code.
    
    setup_arch() calls the iscsi_ibft's find_ibft_region() function
    to find and reserve the memory dedicated to the iBFT and this function
    also saves a virtual pointer to the iBFT table for later use.
    
    The problem is that if KALSR is active, the physical memory gets
    remapped somewhere else in the virtual address space and the pointer is
    no longer valid, this will cause a kernel panic when the iscsi driver tries
    to dereference it.
    
     iBFT detected.
     BUG: unable to handle page fault for address: ffff888000099fd8
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     PGD 0 P4D 0
     Oops: 0000 [#1] SMP PTI
    
    ..snip..
    
     Call Trace:
      ? ibft_create_kobject+0x1d2/0x1d2 [iscsi_ibft]
      do_one_initcall+0x44/0x1d0
      ? kmem_cache_alloc_trace+0x119/0x220
      do_init_module+0x5c/0x270
      __do_sys_init_module+0x12e/0x1b0
      do_syscall_64+0x40/0x80
      entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Fix this bug by saving the address of the physical location
    of the ibft; later the driver will use isa_bus_to_virt() to get
    the correct virtual address.
    
    N.B. On each reboot KASLR randomizes the virtual addresses so
    assuming phys_to_virt before KASLR does its deed is incorrect.
    
    Simplify the code by renaming find_ibft_region()
    to reserve_ibft_region() and remove all the wrappers.
    Signed-off-by: default avatarMaurizio Lombardi <mlombard@redhat.com>
    Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad@kernel.org>
    342f43af
iscsi_ibft.c 20.8 KB