diff --git a/common/lib/kernel/pci.cpp b/common/lib/kernel/pci.cpp index 53ebd1f77..fcdd34dab 100644 --- a/common/lib/kernel/pci.cpp +++ b/common/lib/kernel/pci.cpp @@ -376,7 +376,10 @@ int Device::getIOMMUGroup() const { int ret; - char *group, link[1024], sysfs[1024]; + char *group; + //readlink does not add a null terminator! + char link[1024] = {0}; + char sysfs[1024]; snprintf(sysfs, sizeof(sysfs), "%s/bus/pci/devices/%04x:%02x:%02x.%x/iommu_group", SYSFS_PATH, slot.domain, slot.bus, slot.device, slot.function); diff --git a/common/lib/kernel/vfio.cpp b/common/lib/kernel/vfio.cpp index f209b506e..b71995f55 100644 --- a/common/lib/kernel/vfio.cpp +++ b/common/lib/kernel/vfio.cpp @@ -604,6 +604,8 @@ Device::pciMsiInit(int efds[]) auto *irqSet = reinterpret_cast(irqSetBuf); irqSet->argsz = irqSetSize; + // DATA_EVENTFD binds the interrupt to the provided eventfd. + // SET_ACTION_TRIGGER enables kernel->userspace signalling. irqSet->flags = VFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER; irqSet->index = VFIO_PCI_MSI_IRQ_INDEX; irqSet->start = 0;