|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH for-4.17 v2 4/5] pci: do not disable memory decoding for devices
On 25.10.2022 16:44, Roger Pau Monne wrote:
> --- a/xen/drivers/vpci/header.c
> +++ b/xen/drivers/vpci/header.c
> @@ -121,7 +121,9 @@ static void modify_decoding(const struct pci_dev *pdev,
> uint16_t cmd,
> }
>
> if ( !rom_only &&
> - (bar->type != VPCI_BAR_ROM || header->rom_enabled) )
> + (bar->type != VPCI_BAR_ROM || header->rom_enabled) &&
> + pci_check_bar(pdev, _mfn(PFN_DOWN(bar->addr)),
> + _mfn(PFN_DOWN(bar->addr + bar->size - 1))) )
> bar->enabled = map;
> }
What about the ROM handling immediately above from here?
> @@ -234,9 +236,25 @@ static int modify_bars(const struct pci_dev *pdev,
> uint16_t cmd, bool rom_only)
>
> if ( !MAPPABLE_BAR(bar) ||
> (rom_only ? bar->type != VPCI_BAR_ROM
> - : (bar->type == VPCI_BAR_ROM &&
> !header->rom_enabled)) )
> + : (bar->type == VPCI_BAR_ROM &&
> !header->rom_enabled)) ||
> + /* Skip BARs already in the requested state. */
> + bar->enabled == !!(cmd & PCI_COMMAND_MEMORY) )
> continue;
>
> + /*
> + * Only do BAR position checks for the hardware domain, for guests
> it's
> + * assumed that the hardware domain has changed the position of any
> + * problematic BARs.
> + */
> + if ( is_hardware_domain(pdev->domain) &&
> + !pci_check_bar(pdev, _mfn(start), _mfn(end)) )
> + {
> + printk(XENLOG_G_WARNING
> + "%pp: not mapping BAR [%lx, %lx] invalid position\n",
> + &pdev->sbdf, start, end);
> + continue;
> + }
I'm not convinced of it being appropriate to skip the check for DomU.
I'd rather consider this a "fixme", as (perhaps somewhere else) we
should return an error if a misconfigured device was passed. We cannot
blindly leave the security of the system to tool stack + Dom0 kernel
imo.
And then, if this is Dom0-only, I think it wants to be XENLOG_WARNING,
i.e. without the G infix.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |