From: Timo L. <tim...@ik...> - 2021-08-25 10:50:19
|
Hi, txt-acminfo 5th_gen_i5_i7_SINIT_79.BIN segfaults on my system: Program received signal SIGSEGV, Segmentation fault. does_acmod_match_platform (hdr=hdr@entry=0x7ffff7fc3000) at ../tboot/txt/acmod.c:590 590 txt_heap_t *txt_heap = get_txt_heap(); (gdb) bt #0 does_acmod_match_platform (hdr=hdr@entry=0x7ffff7fc3000) at ../tboot/txt/acmod.c:590 #1 0x00005555555552de in match_platform (hdr=0x7ffff7fc3000) at txt-acminfo.c:207 #2 main (argc=<optimized out>, argv=<optimized out>) at txt-acminfo.c:244 (gdb) x/4i $rip => 0x555555556612 <does_acmod_match_platform+50>: movabs 0xfed30300,%rax 0x55555555661c <does_acmod_match_platform+60>: cmpb $0x4,0x11(%rbp) 0x555555556620 <does_acmod_match_platform+64>: jbe 0x555555556660 <does_acmod_match_platform+128> 0x555555556622 <does_acmod_match_platform+66>: cmpl $0x5,0x8(%rax) It seems heap.h defines get_txt_heap() that refers to the real read_pub_config_reg() before it is #define'd later. After I fixed this I noticed that does_acmod_match_platform() then segfaults when it tries to dereference the pointer returned by get_txt_heap(). I guess txt-acminfo should mmap() TXT heap? Should we then modify get_txt_heap() to behave differently depending on the context or perhaps modify does_acmod_match_platform() to take a pointer to the TXT heap as an argument to avoid this? -Timo |