summaryrefslogtreecommitdiffstats
path: root/drivers/firmware/efi/capsule-loader.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2018-05-04 08:00:01 +0200
committerIngo Molnar <mingo@kernel.org>2018-05-14 08:57:49 +0200
commit1de3a1be8a9345fd0c7d9bb1009b21afe6b6b10f (patch)
treeff183153fffd8b0d699bb330502d1e7e0adffa80 /drivers/firmware/efi/capsule-loader.c
parentefi/x86: Fold __setup_efi_pci32() and __setup_efi_pci64() into one function (diff)
downloadlinux-1de3a1be8a9345fd0c7d9bb1009b21afe6b6b10f.tar.xz
linux-1de3a1be8a9345fd0c7d9bb1009b21afe6b6b10f.zip
efi/x86: Ignore unrealistically large option ROMs
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: Hans de Goede <hdegoede@redhat.com> [ardb: deduplicate 32/64 bit changes, use SZ_16M symbolic constant] Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Ard 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.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/firmware/efi/capsule-loader.c')
0 files changed, 0 insertions, 0 deletions