libunwind-devel
[Top][All Lists]
Advanced

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

Re: [Libunwind-devel] [PATCH] Check that the CIE is within the segment


From: Peter Wu
Subject: Re: [Libunwind-devel] [PATCH] Check that the CIE is within the segment
Date: Thu, 18 Dec 2014 17:49:39 +0100
User-agent: KMail/4.14.3 (Linux/3.17.0-rc4-custom-00168-g7ec62d4; KDE/4.14.3; x86_64; ; )

On Wednesday 17 December 2014 14:26:15 Milian Wolff wrote:
> On Monday 15 December 2014 23:12:29 Milian Wolff wrote:
> > Hey Peter,
> 
> Hey again, more details below, and this time also sent to the libunwind ML.
> 
> > Peter Wu schrieb am 15.12.2014 22:04:
> > > On Monday 15 December 2014 19:34:36 Milian Wolff wrote:
> > >> On Tuesday 25 November 2014 22:10:33 Peter Wu wrote:
> > >> > Due to a bug in the gold linker[1], the .eh_frame and .eh_frame_hdr
> > >> > sections contains garbage. When dwarf_extract_proc_info_from_fde tried
> > >> > to look up the begin of the CIE subsection, it would underflow the
> > >> > .eh_frame segment, resulting in a crash[2].
> > >> > 
> > >> > This patch avoids that crash by checking whether the CIE pointer is
> > >> > located after the begin of the .eh_frame section. The variable "base"
> > >> > was misused in various places as a boolean (decode as .debug_frame or
> > >> > decode as .eh_frame). These instances have been renamed to
> > >> > is_debug_frame where applicable.
> > >> > 
> > >> > Tested on Linux x86_64.
> > >> > 
> > >> >  [1]: https://sourceware.org/bugzilla/show_bug.cgi?id=17639
> > >> > 
> > >> >  [2]:
> > >> > http://lists.nongnu.org/archive/html/libunwind-devel/2014-11/msg00009.h
> > >> > tml
> > >> 
> > >> Hello Peter,
> > >> 
> > >> I have an issue with your patch on my machine. With it applied, my tool
> > >> fails to find backtraces. Attached, you find the libunwind debug output
> > >> of current master with and without your patch applied. I've also
> > >> modified libunwind to output a debug message when your patch hits, i.e.
> > >> the cie_offset_addr < base conditional is met.
> > >> 
> > >> This apparently completely breaks libunwind on my machine...
> > >> 
> > >> 3.17.6-1-ARCH
> > >> Intel(R) Core(TM)2 Quad CPU    Q9550  @ 2.83GHz
> > >> GNU gold (GNU Binutils 2.24) 1.11
> > >> gcc (GCC) 4.9.2
> > >> 
> > >> Do you need any other information?
> > > 
> > > Hi Milian,
> > > 
> > > Could you describe how to setup an environment where this problem
> > > occurs? What would help:
> > > 
> > > - The program that triggers this crash (preferably source code or some
> > > 
> > >   official package in the repos). If this is not possible, maybe you
> > >   could dump the .eh_frame and .eh_frame_hdr sections?
> > > 
> > > - Compiler flags for this program (if customized).
> > > 
> > > I checked out git://anongit.kde.org/heaptrack and executed:
> > >    DUMP_HEAPTRACK_OUTPUT=some.txt LD_PRELOAD=./libheaptrack_preload.so
> > >    LD_LIBRARY_PATH=/path/to/libunwind/build/src/.libs $PROGRAM
> > > 
> > > where $PROGRAM is ls, 'upower --version', 'udevadm monitor', but none of
> > > them trigger a crash.
> > 
> > Try this:
> > 
> > cd heaptrack
> > mkdir build
> > cd build
> > cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
> > make
> > make install
> > heaptrack ./tests/test_cpp
> > 
> > The result will be broken, i.e. heaptrack_print on the
> > heaptrack.test_cpp.$$.gz file will not show any backtraces. When you also
> > set UNW_DEBUG_LEVEL=15 you should see a similar output to mine.
> > 
> > NOTE: It does not crash, it simply fails to get useful backtraces
> > (unw_backtrace returns nothing). And it also did not crash before, without
> > your patch - quite the contrary ;-) It works like a charm there and
> > successfully unwinds the backtraces.
> > > I also run Arch Linux (with testing repo) and can easily bootstrap a new
> > > Arch VM if necessary.
> > 
> > Same for me. I'll try to test this also on another machine of mine to see
> > whether it makes a difference. You'll hear back from me on friday.
> > 
> > Thanks for looking into this! Take care
> 
> So, now I also tested this on an Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz and 
> there the issue does not manifest... Both machines are, software-wise, 
> identical. I tried to use clang to see whether it makes a difference, but 
> still no change. 
> 
> On the "broken" machine:
>                >_ULx86_64_dwarf_extract_proc_info_from_fde: looking for CIE 
> at 
> address 7fe052c8c890
>                >parse_cie: CIE parsed OK, augmentation = "zR", handler=0x0
>              >_ULx86_64_dwarf_extract_proc_info_from_fde: CIE not within 
> segment: 0x7fe0540879c4 base: 0x7fe054087b2c
>              >_ULx86_64_dwarf_extract_proc_info_from_fde: CIE not within 
> segment: 0x7fe05408795c base: 0x7fe054087b2c
> 
> Note: no further UNW_DEBUG_LEVEL output contains "cie".
> 
> On the other, non-broken machine:
>                >_ULx86_64_dwarf_extract_proc_info_from_fde: looking for CIE 
> at 
> address 7fd12f73de88
>                >parse_cie: CIE parsed OK, augmentation = "zR", handler=0x0
>                >_ULx86_64_dwarf_extract_proc_info_from_fde: looking for CIE 
> at 
> address 7fd13092f158
>                >parse_cie: CIE parsed OK, augmentation = "zPLR", 
> handler=0x400cd0
>                >_ULx86_64_dwarf_extract_proc_info_from_fde: looking for CIE 
> at 
> address 7fd13092f158
>                >parse_cie: CIE parsed OK, augmentation = "zPLR", 
> handler=0x400cd0
>                >_ULx86_64_dwarf_extract_proc_info_from_fde: looking for CIE 
> at 
> address 7fd1306eb8c8
>                >parse_cie: CIE parsed OK, augmentation = "zR", handler=0x0
>                >_ULx86_64_dwarf_extract_proc_info_from_fde: looking for CIE 
> at 
> address 4013a8
> ...
> 
> This goes on and one with similar output and the backtraces are produced 
> correctly.
> 
> Any more information I could dig up for you?

I have built heaptrack with RelWithDebInfo, but I still get a valid
backtrace. Can you reproduce the issue on the other machine with the
same libraries and binary?

Are the list of installed packages identical? You can compare the
`pacman -Q` output on both machines to find out.
-- 
Kind regards,
Peter
https://lekensteyn.nl




reply via email to

[Prev in Thread] Current Thread [Next in Thread]