Bug#842642: clang-3.9: memory sanitizer segfaults immediately

Norbert Lange nolange79 at gmail.com
Thu Nov 10 23:46:58 UTC 2016


Tags: patch


Hi,

I got it working, seems that from the 3 related patched, one is already applied.
The attached archive is the 3 patches and a edited "series" file,
it should be painless for you to integrate it into the debian/patches
directory for 3.9

I did not try with 3.8 yet (possibly more difficult), building llvm
takes quite a while.

Kind Regards,
Norbert

2016-11-09 11:04 GMT+01:00 Norbert Lange <nolange79 at gmail.com>:
> Hi,
>
> researched a bit further and the same compiled programm will run fine
> on debian jessie.
> I tracked it down to being caused by a newer glibc version [1][2],
> apparently during loading of shared libs, glibc can now allocate
> memory which messes up sanitzers (mostly in more subtile ways than the
> memory sanitizer).
>
> The result is, that if stretch will ship with the current glibc, clang
> and gcc (I dont think its patched there either), then the sanitizers
> won`t be usable.
> 1) revert the fix in glibc. Would have the advantage that "sanitized"
> binaries compiled from current and older clang/gcc versions will work
> 2) adopt the fixed from upstream [3][4] (possibly more) into clang
> (and possibly gcc).
> or maybe both?
>
> Kind Regards,
> Norbert
>
> PS. shouldn`t the testsuite catch these bugs?
>
> [1] https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=24e2b1cede1952d7d4411a3cafd25dd8593dab9f
> [2] https://llvm.org/bugs/show_bug.cgi?id=27310
> [3] https://github.com/llvm-mirror/compiler-rt/commit/827ea206c1078fc7c7da287984a7ba4563390589
> [4] https://github.com/llvm-mirror/compiler-rt/commit/570ee9dd7a6f90b0370a86535cbde6738d0ccf67
>
> 2016-10-31 21:43 GMT+01:00 Norbert Lange <nolange79 at gmail.com>:
>> On Mon, 31 Oct 2016 08:38:21 +0100 Sylvestre Ledru <sylvestre at debian.org> wrote:
>>> Le 31/10/2016 à 00:39, Norbert Lange a écrit :
>>> > Package: clang-3.9
>>> > Version: 1:3.9-2
>>> > Severity: normal
>>> >
>>> > Dear Maintainer,
>>> >
>>> > The memory sanitizer is unusable as it segfaults during initialization.
>>> > To reproduce:
>>> > echo 'int main() { return 0; }' >/tmp/test.c
>>> > clang -fsanitize=memory -o test test.c
>>> can you try with clang-3.9 instead?
>>
>> Same thing, output:
>>
>> $ clang-3.9 -fsanitize=memory -o test test.c -v
>> clang version 3.9.0-2 (tags/RELEASE_390/final)
>> Target: x86_64-pc-linux-gnu
>> Thread model: posix
>> InstalledDir: /usr/bin
>> Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/6
>> Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/6.2.0
>> Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5
>> Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.1
>> Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6
>> Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0
>> Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6
>> Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6.2.0
>> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5
>> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.1
>> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6
>> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.2.0
>> Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0
>> Candidate multilib: .;@m64
>> Candidate multilib: 32;@m32
>> Candidate multilib: x32;@mx32
>> Selected multilib: .;@m64
>>  "/usr/lib/llvm-3.9/bin/clang" -cc1 -triple x86_64-pc-linux-gnu
>> -emit-obj -mrelax-all -disable-free -disable-llvm-verifier
>> -discard-value-names -main-file-name test.c -mrelocation-model static
>> -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose
>> -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu
>> x86-64 -v -dwarf-column-info -debugger-tuning=gdb -resource-dir
>> /usr/lib/llvm-3.9/bin/../lib/clang/3.9.0 -internal-isystem
>> /usr/local/include -internal-isystem
>> /usr/lib/llvm-3.9/bin/../lib/clang/3.9.0/include
>> -internal-externc-isystem /usr/include/x86_64-linux-gnu
>> -internal-externc-isystem /include -internal-externc-isystem
>> /usr/include -fdebug-compilation-dir /tmp -ferror-limit 19
>> -fmessage-length 135 -fsanitize=memory
>> -fsanitize-blacklist=/usr/lib/llvm-3.9/bin/../lib/clang/3.9.0/msan_blacklist.txt
>> -fno-assume-sane-operator-new -fobjc-runtime=gcc
>> -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/test-2d4d2c.o -x
>> c test.c
>> clang -cc1 version 3.9.0 based upon LLVM 3.9.0 default target
>> x86_64-pc-linux-gnu
>> ignoring nonexistent directory "/include"
>> #include "..." search starts here:
>> #include <...> search starts here:
>>  /usr/local/include
>>  /usr/lib/llvm-3.9/bin/../lib/clang/3.9.0/include
>>  /usr/include/x86_64-linux-gnu
>>  /usr/include
>> End of search list.
>>  "/usr/bin/ld" --hash-style=both --eh-frame-hdr -m elf_x86_64
>> -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o test
>> /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/../../../x86_64-linux-gnu/crt1.o
>> /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/../../../x86_64-linux-gnu/crti.o
>> /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/crtbegin.o
>> -L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0
>> -L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/../../../x86_64-linux-gnu
>> -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu
>> -L/usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/../../..
>> -L/usr/lib/llvm-3.9/bin/../lib -L/lib -L/usr/lib -whole-archive
>> /usr/lib/llvm-3.9/bin/../lib/clang/3.9.0/lib/linux/libclang_rt.msan-x86_64.a
>> -no-whole-archive
>> --dynamic-list=/usr/lib/llvm-3.9/bin/../lib/clang/3.9.0/lib/linux/libclang_rt.msan-x86_64.a.syms
>> /tmp/test-2d4d2c.o --no-as-needed -lpthread -lrt -lm -ldl -lgcc
>> --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s
>> --no-as-needed /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/crtend.o
>> /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/../../../x86_64-linux-gnu/crtn.o
-------------- next part --------------
A non-text attachment was scrubbed...
Name: msan_patch_3.9.tar.gz
Type: application/x-gzip
Size: 3367 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-llvm-team/attachments/20161111/f65e77ff/attachment.bin>


More information about the Pkg-llvm-team mailing list