[PATCH 0/3] tools/perf: Fix perf probe crash by broken DWARF file

Masami Hiramatsu (Google) posted 3 patches 3 years, 5 months ago
tools/perf/util/dwarf-aux.c    |   58 ++++++++++++++++++++++++++++------------
tools/perf/util/dwarf-aux.h    |    3 ++
tools/perf/util/probe-finder.c |   37 +++++++++++++++++---------
3 files changed, 68 insertions(+), 30 deletions(-)
[PATCH 0/3] tools/perf: Fix perf probe crash by broken DWARF file
Posted by Masami Hiramatsu (Google) 3 years, 5 months ago
Hi,

Here is a series of patches for perf probe which improves the robustness
against broken DWARF file.

Since the Clang generates the out of standard DWARF5 file, the perf probe
crashes or failed to analyze it. There are actually fragile code against
it, so I fixed it ([1/3]) to avoid crash by SEGV. And make it accepts
Clang's DWARF5 file ([2/3],[3/3]).

Without this series, the perf probe crashes with the DWARF5 file
which generated by clang as below;
 
  $ ./perf probe -k $BIN_PATH/vmlinux -s $SRC_PATH -L vfs_read:10
  Segmentation fault

This series fixes it to handle such file correctly;

  $ ./perf probe -k $BIN_PATH/vmlinux -s $SRC_PATH -L vfs_read:10
  <vfs_read@$SRC_PATH/fs/read_write.c:10>
 
       11         ret = rw_verify_area(READ, file, pos, count);
       12         if (ret)
                           return ret;

This issue is reported on LLVM ML;
https://www.mail-archive.com/dwarf-discuss@lists.dwarfstd.org/msg00884.html

Thank you,

---

Masami Hiramatsu (Google) (3):
      tools/perf: Fix to avoid crashing with a broken DWARF file
      tools/perf: Fix to use dwarf_attr_integrate for generic attr accessor
      tools/perf: Fix to get declared file name from broken DWARF5


 tools/perf/util/dwarf-aux.c    |   58 ++++++++++++++++++++++++++++------------
 tools/perf/util/dwarf-aux.h    |    3 ++
 tools/perf/util/probe-finder.c |   37 +++++++++++++++++---------
 3 files changed, 68 insertions(+), 30 deletions(-)

--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
Re: [PATCH 0/3] tools/perf: Fix perf probe crash by broken DWARF file
Posted by Masami Hiramatsu (Google) 3 years, 5 months ago
On Tue,  1 Nov 2022 22:14:01 +0900
"Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote:

> Hi,
> 
> Here is a series of patches for perf probe which improves the robustness
> against broken DWARF file.
> 
> Since the Clang generates the out of standard DWARF5 file, the perf probe
> crashes or failed to analyze it. There are actually fragile code against
> it, so I fixed it ([1/3]) to avoid crash by SEGV. And make it accepts
> Clang's DWARF5 file ([2/3],[3/3]).
> 
> Without this series, the perf probe crashes with the DWARF5 file
> which generated by clang as below;
>  
>   $ ./perf probe -k $BIN_PATH/vmlinux -s $SRC_PATH -L vfs_read:10
>   Segmentation fault
> 
> This series fixes it to handle such file correctly;
> 
>   $ ./perf probe -k $BIN_PATH/vmlinux -s $SRC_PATH -L vfs_read:10
>   <vfs_read@$SRC_PATH/fs/read_write.c:10>
>  
>        11         ret = rw_verify_area(READ, file, pos, count);
>        12         if (ret)
>                            return ret;
> 
> This issue is reported on LLVM ML;
> https://www.mail-archive.com/dwarf-discuss@lists.dwarfstd.org/msg00884.html

Hmm, according to the discussion in this thread, this spec is under discussion
(still?). As far as I can see the "DWARF Debugging Information Format Version 5"
2.14, it says "The value 0 indicates that no source line has been specified."
But the description will be updated(?)
http://wiki.dwarfstd.org/index.php?title=DWARF5_Line_Table_File_Numbers

Let me update the series so that carefully remove the "broken". Maybe "clang"
DWARF5?

Thank you,

> 
> Thank you,
> 
> ---
> 
> Masami Hiramatsu (Google) (3):
>       tools/perf: Fix to avoid crashing with a broken DWARF file
>       tools/perf: Fix to use dwarf_attr_integrate for generic attr accessor
>       tools/perf: Fix to get declared file name from broken DWARF5
> 
> 
>  tools/perf/util/dwarf-aux.c    |   58 ++++++++++++++++++++++++++++------------
>  tools/perf/util/dwarf-aux.h    |    3 ++
>  tools/perf/util/probe-finder.c |   37 +++++++++++++++++---------
>  3 files changed, 68 insertions(+), 30 deletions(-)
> 
> --
> Masami Hiramatsu (Google) <mhiramat@kernel.org>


-- 
Masami Hiramatsu (Google) <mhiramat@kernel.org>