[PATCH] Fix segmentation fault by "tree -s" option with Maple Tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Without the patch, do_mt_entry() can call dump_struct_members_for_tree()
with a NULL entry, and parse_for_member_extended() will cause a
segmentation fault during strncpy().

This is caused by "tree -t maple -s struct.member.member" style multiple
level member access:

  crash> tree -t maple -s irq_desc.irq_data.irq  sparse_irqs
  ffff936980188400
    irq_data.irq = 0,
  ffff93698018be00
    irq_data.irq = 1,
  ...
  ffff936980f38e00
    irq_data.irq = 19,
  Segmentation fault (core dumped)

  (gdb) bt
  #0  0x00007faaf8e51635 in __strncpy_avx2 () from /lib64/libc.so.6
  #1  0x00000000005e5927 in parse_for_member_extended (dm=dm@entry=0x7ffcb9e6d860, ...
  #2  0x0000000000603c45 in dump_struct_member (s=s@entry=0x128cde0 <shared_bufs+1024> ...
  #3  0x0000000000513cf5 in dump_struct_members_for_tree (td=td@entry=0x7ffcb9e6eeb0, ...
  #4  0x0000000000651f15 in do_mt_entry (entry=0, min=min@entry=20, max=max@entry=119, ...
  ...

Signed-off-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx>
---
 maple_tree.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/maple_tree.c b/maple_tree.c
index eccd273105a6..8c804d0cb80d 100644
--- a/maple_tree.c
+++ b/maple_tree.c
@@ -313,7 +313,7 @@ static void do_mt_entry(ulong entry, ulong min, ulong max, uint depth,
 		fprintf(fp, "  index: %ld  position: %s/%u\n",
 			++(*global_index), path, index);
 
-	if (td->structname) {
+	if (td->structname && entry) {
 		if (td->flags & TREE_STRUCT_RADIX_10)
 			print_radix = 10;
 		else if (td->flags & TREE_STRUCT_RADIX_16)
-- 
2.31.1

--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux