diff --git a/drgn/helpers/common/memory.py b/drgn/helpers/common/memory.py index e28f5426c..95b9019ff 100644 --- a/drgn/helpers/common/memory.py +++ b/drgn/helpers/common/memory.py @@ -54,6 +54,7 @@ def _identify_kernel_vmap( break except AttributeError: # CONFIG_VMAP_STACK must be disabled. + task = None break except FaultError: continue diff --git a/tests/linux_kernel/helpers/test_common.py b/tests/linux_kernel/helpers/test_common.py index 43b579703..85a720a93 100644 --- a/tests/linux_kernel/helpers/test_common.py +++ b/tests/linux_kernel/helpers/test_common.py @@ -52,20 +52,28 @@ def test_identify_slab_cache(self): @skip_unless_have_test_kmod def test_identify_vmap(self): - self.assertTrue( - identify_address(self.prog["drgn_test_vmalloc_va"]).startswith("vmap: 0x") - ) + for cache in (None, {}): + with self.subTest("uncached" if cache is None else "cached"): + self.assertTrue( + identify_address( + self.prog["drgn_test_vmalloc_va"], cache=cache + ).startswith("vmap: 0x") + ) @skip_unless_have_test_kmod def test_identify_vmap_stack(self): if not self.prog["drgn_test_vmap_stack_enabled"]: self.skipTest("kernel does not use vmap stacks (CONFIG_VMAP_STACK)") - self.assertEqual( - identify_address( - self.prog, self.prog["drgn_test_kthread"].stack.value_() + 1234 - ), - f"vmap stack: {self.prog['drgn_test_kthread'].pid.value_()} (drgn_test_kthre) +0x4d2", - ) + for cache in (None, {}): + with self.subTest("uncached" if cache is None else "cached"): + self.assertEqual( + identify_address( + self.prog, + self.prog["drgn_test_kthread"].stack.value_() + 1234, + cache=cache, + ), + f"vmap stack: {self.prog['drgn_test_kthread'].pid.value_()} (drgn_test_kthre) +0x4d2", + ) @skip_unless_have_full_mm_support @skip_unless_have_test_kmod