• H
    efi/x86: Ignore unrealistically large option ROMs · 1de3a1be
    Hans de Goede 提交于
    setup_efi_pci() tries to save a copy of each PCI option ROM as this may
    be necessary for the device driver for the PCI device to have access too.
    
    On some systems the efi_pci_io_protocol's romimage and romsize fields
    contain invalid data, which looks a bit like pointers pointing back into
    other EFI code or data. Interpreting these pointers as romsize leads to
    a very large value and if we then try to alloc this amount of memory to
    save a copy the alloc call fails.
    
    This leads to a "Failed to alloc mem for rom" error being printed on the
    EFI console for each PCI device.
    
    This commit avoids the printing of these errors, by checking romsize before
    doing the alloc and if it is larger then the EFI spec limit of 16 MiB
    silently ignore the ROM fields instead of trying to alloc mem and fail.
    Tested-by: NHans de Goede <hdegoede@redhat.com>
    [ardb: deduplicate 32/64 bit changes, use SZ_16M symbolic constant]
    Signed-off-by: NHans de Goede <hdegoede@redhat.com>
    Signed-off-by: NArd Biesheuvel <ard.biesheuvel@linaro.org>
    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/20180504060003.19618-16-ard.biesheuvel@linaro.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
    1de3a1be
eboot.c 26.6 KB