]> Git Repo - linux.git/blob - scripts/gdb/linux/kasan.py
Merge drm/drm-next into drm-intel-next
[linux.git] / scripts / gdb / linux / kasan.py
1 # SPDX-License-Identifier: GPL-2.0
2 #
3 # Copyright 2024 Canonical Ltd.
4 #
5 # Authors:
6 #  Kuan-Ying Lee <[email protected]>
7 #
8
9 import gdb
10 from linux import constants, mm
11
12 def help():
13     t = """Usage: lx-kasan_mem_to_shadow [Hex memory addr]
14     Example:
15         lx-kasan_mem_to_shadow 0xffff000008eca008\n"""
16     gdb.write("Unrecognized command\n")
17     raise gdb.GdbError(t)
18
19 class KasanMemToShadow(gdb.Command):
20     """Translate memory address to kasan shadow address"""
21
22     p_ops = None
23
24     def __init__(self):
25         if constants.LX_CONFIG_KASAN_GENERIC or constants.LX_CONFIG_KASAN_SW_TAGS:
26             super(KasanMemToShadow, self).__init__("lx-kasan_mem_to_shadow", gdb.COMMAND_SUPPORT)
27
28     def invoke(self, args, from_tty):
29         if not constants.LX_CONFIG_KASAN_GENERIC or constants.LX_CONFIG_KASAN_SW_TAGS:
30             raise gdb.GdbError('CONFIG_KASAN_GENERIC or CONFIG_KASAN_SW_TAGS is not set')
31
32         argv = gdb.string_to_argv(args)
33         if len(argv) == 1:
34             if self.p_ops is None:
35                 self.p_ops = mm.page_ops().ops
36             addr = int(argv[0], 16)
37             shadow_addr = self.kasan_mem_to_shadow(addr)
38             gdb.write('shadow addr: 0x%x\n' % shadow_addr)
39         else:
40             help()
41     def kasan_mem_to_shadow(self, addr):
42         return (addr >> self.p_ops.KASAN_SHADOW_SCALE_SHIFT) + self.p_ops.KASAN_SHADOW_OFFSET
43
44 KasanMemToShadow()
This page took 0.033901 seconds and 4 git commands to generate.