]> xenbits.xensource.com Git - people/sstabellini/xen-unstable.git/.git/commitdiff
AMD/IOMMU: Fix crash in 'V' debugkey
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 13 Nov 2019 13:19:36 +0000 (13:19 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 13 Nov 2019 14:32:44 +0000 (14:32 +0000)
c/s bb038f31168 "AMD/IOMMU: replace INTREMAP_ENTRIES" introduces a call to
intremap_table_entries() in dump_intremap_table() before tbl.ptr is checked
for NULL.

intremap_table_entries() internally uses virt_to_page() which falls over

  ASSERT(va >= XEN_VIRT_START);

in __virt_to_page().

Reported-by: Igor Druzhinin <igor.druzhinin@citrix.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Release-acked-by: Juergen Gross <jgross@suse.com>
xen/drivers/passthrough/amd/iommu_intr.c

index 1eed60f2651e86f2c38b924512461caa1de646e9..5e92c023f8aea2d42660b0bff05181f49e063bed 100644 (file)
@@ -847,11 +847,13 @@ static void dump_intremap_table(const struct amd_iommu *iommu,
                                 union irte_cptr tbl,
                                 const struct ivrs_mappings *ivrs_mapping)
 {
-    unsigned int count, nr = intremap_table_entries(tbl.ptr, iommu);
+    unsigned int count, nr;
 
     if ( !tbl.ptr )
         return;
 
+    nr = intremap_table_entries(tbl.ptr, iommu);
+
     for ( count = 0; count < nr; count++ )
     {
         if ( iommu->ctrl.ga_en