On 30 March 2018 at 14:13, Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > 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_64'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 256M silently ignore the > ROM fields instead of trying to alloc mem and fail. > > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> Acked-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> I will pick this up after the merge window > --- > arch/x86/boot/compressed/eboot.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c > index 886a9115af62..f744b037d3cd 100644 > --- a/arch/x86/boot/compressed/eboot.c > +++ b/arch/x86/boot/compressed/eboot.c > @@ -230,7 +230,13 @@ __setup_efi_pci64(efi_pci_io_protocol_64 *pci, struct pci_setup_rom **__rom) > if (status != EFI_SUCCESS) > return status; > > - if (!pci->romimage || !pci->romsize) > + /* > + * Some firmwares contain EFI function pointers at the place where the > + * romimage and romsize fields are supposed to be. Typically the EFI > + * code is mapped at high addresses, translating to an unrealistically > + * large romsize. We reject any roms over 256M in size to catch this. > + */ > + if (!pci->romimage || !pci->romsize || pci->romsize > 0x10000000) > return EFI_INVALID_PARAMETER; > > size = pci->romsize + sizeof(*rom); > -- > 2.17.0.rc2 > -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html