[libunwind] [Libunwind] Try to fix msan failures (PR #120013)
Dmitry Chestnykh via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 17 00:57:51 PST 2024
chestnykh wrote:
I've debugged msan errors. On CI there were stack overflows caused by 'wrong' msan reports and circular calls libunwind -> libmsan -> libunwind.
For example:
```
#4234 0x0000555555587eb2 in __msan_warning_with_origin_noreturn () at /home/dima/work/llvm-project/compiler-rt/lib/msan/msan.cpp:422
#4235 0x00007ffff7f7828e in libunwind::Registers_x86_64::getRegister (this=0x7fffffa07cc0, regNum=-1) at /home/dima/work/llvm-project/libunwind/src/Registers.hpp:412
#4236 0x00007ffff7f72b5c in libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::getReg (this=0x7fffffa07cb0, regNum=-1)
at /home/dima/work/llvm-project/libunwind/src/UnwindCursor.hpp:1353
#4237 0x00007ffff7f741a3 in libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>::setInfoBasedOnIPRegister (this=0x7fffffa07cb0, isReturnAddress=false)
at /home/dima/work/llvm-project/libunwind/src/UnwindCursor.hpp:2561
#4238 0x00007ffff7f6477f in __unw_init_local (cursor=0x7fffffa07cb0, context=0x7fffffa07c08) at /home/dima/work/llvm-project/libunwind/src/libunwind.cpp:91
#4239 0x00007ffff7fb2f48 in _Unwind_Backtrace (callback=0x55555561be20 <Unwind_Trace()>, ref=0x7fffffa07de8) at /home/dima/work/llvm-project/libunwind/src/UnwindLevel1-gcc-ext.c:137
#4240 0x000055555561bdcb in UnwindSlow () at /home/dima/work/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp:130
#4241 0x0000555555615455 in __sanitizer::BufferedStackTrace::Unwind(unsigned int, unsigned long, unsigned long, void*, unsigned long, unsigned long, bool) ()
at /home/dima/work/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_libcdep.cpp:158
#4242 0x0000555555587985 in UnwindImpl () at /home/dima/work/llvm-project/compiler-rt/lib/msan/msan.cpp:342
#4243 0x0000555555587578 in Unwind () at /home/dima/work/llvm-project/compiler-rt/lib/msan/../sanitizer_common/sanitizer_stacktrace.h:130
#4244 PrintWarningWithOrigin () at /home/dima/work/llvm-project/compiler-rt/lib/msan/msan.cpp:247
#4245 0x0000555555587eb2 in __msan_warning_with_origin_noreturn () at /home/dima/work/llvm-project/compiler-rt/lib/msan/msan.cpp:422
```
There were also regular msan reports fixed by modifying tests srcs to add explicit initialization of unw_cursor_t and unw_context_t variables:
```
# .---command stderr------------
# | ==152363==WARNING: MemorySanitizer: use-of-uninitialized-value
# | #0 0x7ffff7fa6564 (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/x86_64-unknown-linux-gnu/libunwind.so.1+0x6564)
# | #1 0x7ffff7fa6bee (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/x86_64-unknown-linux-gnu/libunwind.so.1+0x6bee)
# | #2 0x7ffff7fa28f9 (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/x86_64-unknown-linux-gnu/libunwind.so.1+0x28f9)
# | #3 0x55555562481d (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/unw_resume.pass.cpp.dir/t.tmp.exe+0xd081d)
# | #4 0x5555556248a6 (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/unw_resume.pass.cpp.dir/t.tmp.exe+0xd08a6)
# | #5 0x7ffff7945e07 (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
# | #6 0x7ffff7945ecb (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
# | #7 0x555555587334 (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/unw_resume.pass.cpp.dir/t.tmp.exe+0x33334)
# |
# | Uninitialized value was stored to memory at
# | #0 0x55555558e52d (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/unw_resume.pass.cpp.dir/t.tmp.exe+0x3a52d)
# | #1 0x7ffff7fa28dc (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/x86_64-unknown-linux-gnu/libunwind.so.1+0x28dc)
# | #2 0x55555562481d (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/unw_resume.pass.cpp.dir/t.tmp.exe+0xd081d)
# | #3 0x5555556248a6 (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/unw_resume.pass.cpp.dir/t.tmp.exe+0xd08a6)
# | #4 0x7ffff7945e07 (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
# | #5 0x7ffff7945ecb (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
# | #6 0x555555587334 (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/unw_resume.pass.cpp.dir/t.tmp.exe+0x33334)
# |
# | Uninitialized value was created by an allocation of 'context' in the stack frame
# | #0 0x5555556247bc (/home/dima/work/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/unw_resume.pass.cpp.dir/t.tmp.exe+0xd07bc)
```
https://github.com/llvm/llvm-project/pull/120013
More information about the cfe-commits
mailing list