From 300f50eefd2c8b2e2591d44949afaec0444a46a4 Mon Sep 17 00:00:00 2001
From: Liam Mark <lmark@codeaurora.org>
Date: Fri, 24 Jun 2016 11:25:45 -0700
Subject: [PATCH] lrdp-v2: check for NULL pgtbl_ops

Ensure we don't try to parse the page tables for an arm_smmu_domain
where the pgtbl_ops is NULL.

CRs-Fixed: 1034128
Change-Id: If9e63e27a052ed45ad3c187983311acdc3376579
---
 linux-ramdump-parser-v2/iommulib.py | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/linux-ramdump-parser-v2/iommulib.py b/linux-ramdump-parser-v2/iommulib.py
index 585f9e2..6124734 100644
--- a/linux-ramdump-parser-v2/iommulib.py
+++ b/linux-ramdump-parser-v2/iommulib.py
@@ -96,18 +96,22 @@ class IommuLib(object):
             pgtbl_ops_ptr = self.ramdump.read_structure_field(
                 arm_smmu_domain_ptr, 'struct arm_smmu_domain', 'pgtbl_ops')
 
-            io_pgtable_ptr = self.ramdump.container_of(
-                pgtbl_ops_ptr, 'struct io_pgtable', 'ops')
-
-            arm_lpae_io_pgtable_ptr = self.ramdump.container_of(
-                io_pgtable_ptr, 'struct arm_lpae_io_pgtable', 'iop')
-
-            pg_table = self.ramdump.read_structure_field(
-                arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable', 'pgd')
-
-            level = self.ramdump.read_structure_field(
-                arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable',
-                'levels')
+            pg_table = 0
+            level = 0
+            if pgtbl_ops_ptr != 0:
+                io_pgtable_ptr = self.ramdump.container_of(
+                    pgtbl_ops_ptr, 'struct io_pgtable', 'ops')
+
+                arm_lpae_io_pgtable_ptr = self.ramdump.container_of(
+                    io_pgtable_ptr, 'struct arm_lpae_io_pgtable', 'iop')
+
+                pg_table = self.ramdump.read_structure_field(
+                    arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable',
+                    'pgd')
+
+                level = self.ramdump.read_structure_field(
+                    arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable',
+                    'levels')
 
             domain_create = Domain(pg_table, 0, [], client_name,
                                    ARM_SMMU_DOMAIN, level)
-- 
GitLab