Skip to content
Snippets Groups Projects
Commit b02616f5 authored by wadesong's avatar wadesong
Browse files

lrdp-v2: Correct SLUB track address calculation

SLUB allocation and freeing tracking storage address calculation
doesn't take into account the length of the red zone header,
resulting in incorrect stack dump when Linux RAM dump parser is
used to parse(with --slabinfo option)dumps generated with
SLUB_DEBUG options enabled.

Change-Id: I50f4c6d304ff1ecd57bfddb1bfa9441ff5cb3ac1
parent 95ba76bb
No related branches found
No related tags found
No related merge requests found
......@@ -76,6 +76,11 @@ class kmem_cache(object):
self.inuse = ramdump.read_int(addr + offset)
if self.inuse is None:
return
offset = ramdump.field_offset(
'struct kmem_cache', 'red_left_pad')
self.red_left_pad = ramdump.read_int(addr + offset)
if self.red_left_pad is None:
self.red_left_pad = 0
self.addr = addr
self.valid = True
......@@ -147,9 +152,9 @@ class Slabinfo(RamParser):
def get_track(self, ramdump, slab, obj, track_type):
track_size = g_offsetof.sizeof_struct_track
if slab.offset != 0:
p = obj + slab.offset + g_offsetof.sizeof_void_pointer
p = obj + slab.red_left_pad + slab.offset + g_offsetof.sizeof_void_pointer
else:
p = obj + slab.inuse
p = obj + slab.red_left_pad + slab.inuse
return p + track_type * track_size
def extract_callstack(self, ramdump, stack, out_file):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment