[libvirt PATCH] util: validate pcie_cap_pos != 0 in virDeviceHasPCIExpressLink()

Michal Privoznik mprivozn at redhat.com
Thu Jan 7 09:30:30 UTC 2021


On 1/7/21 12:51 AM, Laine Stump wrote:
> virDeviceHasPCIExpressLink() wasn't checking that pcie_cap_pos was
> valid before attempting to use it, which could lead to reading the
> byte at offset 0+PCI_CAP_ID_EXP instead of [valid
> offset]+PCI_CAP_ID_EXP. In particular, this could happen for
> "integrated" PCI devices (those that are on the PCIe root complex). If
> it happened that the byte from the wrong address had the "right" bit
> set, then it would lead to us innappropriately believing that Express
> Link info was available when it wasn't, and the node device driver
> would log an error like this:
> 
>    virPCIDeviceGetLinkCapSta:2754 :
>    internal error: pci device 0000:00:18.0 is not a PCI-Express device
> 
> during a libvirtd restart. (this didn't ever occur until after
> virPCIDeviceIsPCIExpress() was made more intelligent in commit
> c00b6b1ae, which hasn't yet been in any official release)
> 
> Signed-off-by: Laine Stump <laine at redhat.com>
> ---
>   src/util/virpci.c | 5 +++++
>   1 file changed, 5 insertions(+)

Reviewed-by: Michal Privoznik <mprivozn at redhat.com>

Michal




More information about the libvir-list mailing list