mirror of https://github.com/proxmox/mirror_qemu
intel_iommu: allocate new key when creating new address space
We use the pointer to stack for key for new address space, this will break hash table searching, fixing by g_malloc() a new key instead. Cc: Michael S. Tsirkin <mst@redhat.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Richard Henderson <rth@twiddle.net> Cc: Eduardo Habkost <ehabkost@redhat.com> Acked-by: Peter Xu <peterx@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>master
parent
e0a3c8ccaa
commit
2d3fc5816e
|
@ -2347,12 +2347,13 @@ VTDAddressSpace *vtd_find_add_as(IntelIOMMUState *s, PCIBus *bus, int devfn)
|
||||||
char name[128];
|
char name[128];
|
||||||
|
|
||||||
if (!vtd_bus) {
|
if (!vtd_bus) {
|
||||||
|
uintptr_t *new_key = g_malloc(sizeof(*new_key));
|
||||||
|
*new_key = (uintptr_t)bus;
|
||||||
/* No corresponding free() */
|
/* No corresponding free() */
|
||||||
vtd_bus = g_malloc0(sizeof(VTDBus) + sizeof(VTDAddressSpace *) * \
|
vtd_bus = g_malloc0(sizeof(VTDBus) + sizeof(VTDAddressSpace *) * \
|
||||||
X86_IOMMU_PCI_DEVFN_MAX);
|
X86_IOMMU_PCI_DEVFN_MAX);
|
||||||
vtd_bus->bus = bus;
|
vtd_bus->bus = bus;
|
||||||
key = (uintptr_t)bus;
|
g_hash_table_insert(s->vtd_as_by_busptr, new_key, vtd_bus);
|
||||||
g_hash_table_insert(s->vtd_as_by_busptr, &key, vtd_bus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vtd_dev_as = vtd_bus->dev_as[devfn];
|
vtd_dev_as = vtd_bus->dev_as[devfn];
|
||||||
|
|
Loading…
Reference in New Issue