http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60536
--- Comment #9 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
(In reply to Kostya Serebryany from comment #6)
> > _Unwind_Find_FDE+0x000001D9 /home/markus/gcc/libgcc/unwind-dw2-fde-dip.c:462
> > /home/markus/gcc/libgcc/unwind-dw2.c:1182
> > _Unwind_Backtrace+0x0000004B /home/markus/gcc/libgcc/unwind.inc:291
>
> Interesting. asan detects a bug and starts reporting it, then if crashes
> inside the slow unwinder.
> Try the fast unwinder?
> ASAN_OPTIONS=fast_unwind_on_fatal=1
Thanks, this works fine:
markus@x4 tmp % ASAN_OPTIONS=fast_unwind_on_fatal=1
/var/tmp/moz-build-dir/dist/bin/firefox
=================================================================
==10632==ERROR: AddressSanitizer: heap-use-after-free on address 0x60200001ec50
at pc 0x7f3e30645dbd bp 0x7fff6d3b2a60 sp 0x7fff6d3b2a38
READ of size 2 at 0x60200001ec50 thread T0
#0 0x7f3e30645dbc in setlocale
(/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/libasan.so.1+0x3cdbc)
#1 0x7f3e1d643400 in qtSettingsInit
(/usr/lib64/gtk-2.0/2.10.0/engines/libqtcurve.so+0x20400)
#2 0x7f3e1d637472 in qtcurve_rc_style_init
(/usr/lib64/gtk-2.0/2.10.0/engines/libqtcurve.so+0x14472)
0x60200001ec50 is located 0 bytes inside of 12-byte region
[0x60200001ec50,0x60200001ec5c)
freed by thread T0 here:
#0 0x7f3e30667d37 in __interceptor_free
(/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/libasan.so.1+0x5ed37)
#1 0x7f3e2fc0b6c2 in setlocale (/lib/libc.so.6+0x2a6c2)
#2 0x7f3e30645cdb in setlocale
(/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/libasan.so.1+0x3ccdb)
#3 0x7f3e1d641dc2 in qtSettingsInit
(/usr/lib64/gtk-2.0/2.10.0/engines/libqtcurve.so+0x1edc2)
#4 0x7f3e1d637472 in qtcurve_rc_style_init
(/usr/lib64/gtk-2.0/2.10.0/engines/libqtcurve.so+0x14472)
previously allocated by thread T0 here:
#0 0x7f3e30667f6f in __interceptor_malloc
(/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/libasan.so.1+0x5ef6f)
#1 0x7f3e2fc64639 in __GI___strdup (/lib/libc.so.6+0x83639)
SUMMARY: AddressSanitizer: heap-use-after-free ??:0 setlocale
Shadow bytes around the buggy address:
0x0c047fffbd30: fa fa 00 00 fa fa 00 00 fa fa fd fd fa fa 00 00
0x0c047fffbd40: fa fa 00 00 fa fa 00 00 fa fa 00 00 fa fa fd fd
0x0c047fffbd50: fa fa 00 00 fa fa 00 00 fa fa 00 fa fa fa 00 fa
0x0c047fffbd60: fa fa 00 00 fa fa 06 fa fa fa 00 04 fa fa fd fd
0x0c047fffbd70: fa fa 00 04 fa fa 00 04 fa fa fd fd fa fa 00 04
=>0x0c047fffbd80: fa fa 00 04 fa fa fd fd fa fa[fd]fd fa fa 00 04
0x0c047fffbd90: fa fa fd fd fa fa 00 04 fa fa 00 04 fa fa fd fd
0x0c047fffbda0: fa fa 00 04 fa fa 00 04 fa fa fd fd fa fa 00 04
0x0c047fffbdb0: fa fa 00 fa fa fa 00 fa fa fa 00 fa fa fa 00 fa
0x0c047fffbdc0: fa fa 00 fa fa fa 00 fa fa fa 00 fa fa fa 00 fa
0x0c047fffbdd0: fa fa 00 fa fa fa 00 07 fa fa 00 fa fa fa fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Heap right redzone: fb
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Contiguous container OOB:fc
ASan internal: fe
==10632==ABORTING
The strange thing is that I cannot reproduce the issue above anymore.
Without ASAN_OPTIONS=fast_unwind_on_fatal=1 I now get:
=================================================================
==10801==ERROR: AddressSanitizer: heap-use-after-free on address 0x60200001ec50
at pc 0x7fc97d727dbd bp 0x7fff3cd0d460 sp 0x7fff3cd0d438
READ of size 2 at 0x60200001ec50 thread T0
#0 0x7fc97d727dbc in setlocale
(/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/libasan.so.1+0x3cdbc)
#1 0x7fc96a725400 in qtSettingsInit
(/usr/lib64/gtk-2.0/2.10.0/engines/libqtcurve.so+0x20400)
#2 0x7fc96a719472 in qtcurve_rc_style_init
(/usr/lib64/gtk-2.0/2.10.0/engines/libqtcurve.so+0x14472)
#3 0x7fc97040da17 in g_type_create_instance
(/usr/lib/libgobject-2.0.so.0+0x31a17)
#4 0x7fc9703f1562 in g_object_new_internal
(/usr/lib/libgobject-2.0.so.0+0x15562)
#5 0x7fc9703f327c in g_object_newv (/usr/lib/libgobject-2.0.so.0+0x1727c)
#6 0x7fc9703f3a0b in g_object_new (/usr/lib/libgobject-2.0.so.0+0x17a0b)
#7 0x7fc96a720afb in theme_create_rc_style
(/usr/lib64/gtk-2.0/2.10.0/engines/libqtcurve.so+0x1bafb)
#8 0x7fc96ffe6b1d in gtk_rc_parse_any
(/usr/lib/libgtk-x11-2.0.so.0+0x17cb1d)
#9 0x7fc96ffe731c in gtk_rc_context_parse_one_file
(/usr/lib/libgtk-x11-2.0.so.0+0x17d31c)
#10 0x7fc96ffe7584 in gtk_rc_context_parse_file
(/usr/lib/libgtk-x11-2.0.so.0+0x17d584)
#11 0x7fc96ffe6246 in gtk_rc_parse_any
(/usr/lib/libgtk-x11-2.0.so.0+0x17c246)
#12 0x7fc96ffe731c in gtk_rc_context_parse_one_file
(/usr/lib/libgtk-x11-2.0.so.0+0x17d31c)
#13 0x7fc96ffe7584 in gtk_rc_context_parse_file
(/usr/lib/libgtk-x11-2.0.so.0+0x17d584)
#14 0x7fc96ffe7dce in IA__gtk_rc_reparse_all_for_settings
(/usr/lib/libgtk-x11-2.0.so.0+0x17ddce)
#15 0x7fc970004b51 in gtk_settings_get_for_screen
(/usr/lib/libgtk-x11-2.0.so.0+0x19ab51)
#16 0x7fc970019e08 in gtk_style_init
(/usr/lib/libgtk-x11-2.0.so.0+0x1afe08)
#17 0x7fc97040da17 in g_type_create_instance
(/usr/lib/libgobject-2.0.so.0+0x31a17)
#18 0x7fc9703f1562 in g_object_new_internal
(/usr/lib/libgobject-2.0.so.0+0x15562)
#19 0x7fc9703f327c in g_object_newv (/usr/lib/libgobject-2.0.so.0+0x1727c)
#20 0x7fc9703f3a0b in g_object_new (/usr/lib/libgobject-2.0.so.0+0x17a0b)
#21 0x7fc9700b1ff8 in IA__gtk_widget_get_default_style
(/usr/lib/libgtk-x11-2.0.so.0+0x247ff8)
#22 0x7fc9700b20a3 in gtk_widget_init
(/usr/lib/libgtk-x11-2.0.so.0+0x2480a3)
#23 0x7fc97040d9d6 in g_type_create_instance
(/usr/lib/libgobject-2.0.so.0+0x319d6)
#24 0x7fc9703f0f97 in g_object_constructor
(/usr/lib/libgobject-2.0.so.0+0x14f97)
#25 0x7fc96ff895ad in gtk_invisible_constructor
(/usr/lib/libgtk-x11-2.0.so.0+0x11f5ad)
#26 0x7fc9703f1eaa in g_object_new_internal
(/usr/lib/libgobject-2.0.so.0+0x15eaa)
#27 0x7fc9703f327c in g_object_newv (/usr/lib/libgobject-2.0.so.0+0x1727c)
#28 0x7fc9703f3a0b in g_object_new (/usr/lib/libgobject-2.0.so.0+0x17a0b)
#29 0x7fc974146d62 in nsLookAndFeel::Init()
/var/tmp/mozilla-central/widget/gtk/nsLookAndFeel.cpp:895
#30 0x7fc974148ead in __base_ctor
/var/tmp/mozilla-central/widget/gtk/nsLookAndFeel.cpp:47
#31 0x7fc974148ead in GetInstance
/var/tmp/mozilla-central/widget/xpwidgets/nsXPLookAndFeel.cpp:252
#32 0x7fc974148ead in
mozilla::LookAndFeel::GetInt(mozilla::LookAndFeel::IntID, int*)
/var/tmp/mozilla-central/widget/xpwidgets/nsXPLookAndFeel.cpp:716
and here the Firefox process keeps allocating memory until the OOM killer
terminates it.