Commit 0774e392 authored by Joerg Roedel's avatar Joerg Roedel

iommu/amd: Fix wrong assumption in iommu-group specific code

The new IOMMU groups code in the AMD IOMMU driver makes the
assumption that there is a pci_dev struct available for all
device-ids listed in the IVRS ACPI table. Unfortunatly this
assumption is not true and so this code causes a NULL
pointer dereference at boot on some systems.

Fix it by making sure the given pointer is never NULL when
passed to the group specific code. The real fix is larger
and will be queued for v3.7.
Reported-by: default avatarFlorian Dazinger <florian@dazinger.net>
Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
parent bef83de5
...@@ -266,7 +266,7 @@ static void swap_pci_ref(struct pci_dev **from, struct pci_dev *to) ...@@ -266,7 +266,7 @@ static void swap_pci_ref(struct pci_dev **from, struct pci_dev *to)
static int iommu_init_device(struct device *dev) static int iommu_init_device(struct device *dev)
{ {
struct pci_dev *dma_pdev, *pdev = to_pci_dev(dev); struct pci_dev *dma_pdev = NULL, *pdev = to_pci_dev(dev);
struct iommu_dev_data *dev_data; struct iommu_dev_data *dev_data;
struct iommu_group *group; struct iommu_group *group;
u16 alias; u16 alias;
...@@ -293,7 +293,9 @@ static int iommu_init_device(struct device *dev) ...@@ -293,7 +293,9 @@ static int iommu_init_device(struct device *dev)
dev_data->alias_data = alias_data; dev_data->alias_data = alias_data;
dma_pdev = pci_get_bus_and_slot(alias >> 8, alias & 0xff); dma_pdev = pci_get_bus_and_slot(alias >> 8, alias & 0xff);
} else }
if (dma_pdev == NULL)
dma_pdev = pci_dev_get(pdev); dma_pdev = pci_dev_get(pdev);
/* Account for quirked devices */ /* Account for quirked devices */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment