提交 9a3e12c8 编写于 作者: M Michael S. Tsirkin 提交者: Anthony Liguori

fix segfault in msix_save

This fixes segfault reported by Kevin Wolf,
and simplifies the code in msix_save.
Reported-by: NKevin Wolf <kwolf@redhat.com>
Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 391354f1
......@@ -284,11 +284,13 @@ int msix_uninit(PCIDevice *dev)
void msix_save(PCIDevice *dev, QEMUFile *f)
{
unsigned nentries = (pci_get_word(dev->config + PCI_MSIX_FLAGS) &
PCI_MSIX_FLAGS_QSIZE) + 1;
qemu_put_buffer(f, dev->msix_table_page, nentries * MSIX_ENTRY_SIZE);
qemu_put_buffer(f, dev->msix_table_page + MSIX_PAGE_PENDING,
(nentries + 7) / 8);
unsigned n = dev->msix_entries_nr;
if (!dev->cap_present & QEMU_PCI_CAP_MSIX)
return;
qemu_put_buffer(f, dev->msix_table_page, n * MSIX_ENTRY_SIZE);
qemu_put_buffer(f, dev->msix_table_page + MSIX_PAGE_PENDING, (n + 7) / 8);
}
/* Should be called after restoring the config space. */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册