[SeaBIOS] [PATCH] optionrom: disallow int19 redirect for pnp roms.
Laszlo Ersek
lersek at redhat.com
Tue Nov 27 16:38:09 CET 2018
On 11/27/18 13:10, Gerd Hoffmann wrote:
> Check whenever pnp roms attempt to redirect int19, and in case it does
> log a message and undo the redirect.
>
> A pnp rom should not need this, we have BEVs and BCVs for that.
> Nevertheless there are roms in the wild which are redirecting int19.
> At least some BIOS implementations for physical hardware have a config
> option in the setup to allow/disallow int19 redirections, so just not
> allowing this seems to be the way to deal with this situation.
>
> Buglink: https://bugzilla.redhat.com//show_bug.cgi?id=1642135
> Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
> ---
> src/optionroms.c | 18 +++++++++++++++++-
> 1 file changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/src/optionroms.c b/src/optionroms.c
> index fc992f649f..4ec5504ca9 100644
> --- a/src/optionroms.c
> +++ b/src/optionroms.c
> @@ -8,6 +8,7 @@
> #include "bregs.h" // struct bregs
> #include "config.h" // CONFIG_*
> #include "farptr.h" // FLATPTR_TO_SEG
> +#include "biosvar.h" // GET_IVT
> #include "hw/pci.h" // pci_config_readl
> #include "hw/pcidevice.h" // foreachpci
> #include "hw/pci_ids.h" // PCI_CLASS_DISPLAY_VGA
> @@ -136,9 +137,24 @@ init_optionrom(struct rom_header *rom, u16 bdf, int isvga)
>
> tpm_option_rom(newrom, rom->size * 512);
>
> - if (isvga || get_pnp_rom(newrom))
> + struct pnp_data *pnp = get_pnp_rom(newrom);
> + if (isvga || pnp) {
> + struct segoff_s old19, new19;
> // Only init vga and PnP roms here.
> + old19 = GET_IVT(0x19);
> callrom(newrom, bdf);
> + new19 = GET_IVT(0x19);
> + if (old19.seg != new19.seg ||
> + old19.offset != new19.offset) {
> + dprintf(1, "WARNING! rom tried to hijack int19 "
> + "(vec %04x:%04x, pnp %s, bev %s, bvc %s)\n",
> + new19.seg, new19.offset,
> + pnp ? "yes" : "no",
> + pnp && pnp->bev ? "yes" : "no",
> + pnp && pnp->bcv ? "yes" : "no");
> + SET_IVT(0x19, old19);
> + }
> + }
>
> return rom_confirm(newrom->size * 512);
> }
>
Is it OK to call get_pnp_rom() when "isvga" is set?
Thanks
Laszlo
More information about the SeaBIOS
mailing list