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

Message ID 166730844138.2095228.4225918836201778608.stgit@devnote3
Headers
Series tools/perf: Fix perf probe crash by broken DWARF file |

Message

Masami Hiramatsu (Google) Nov. 1, 2022, 1:14 p.m. UTC
  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>
  

Comments

Masami Hiramatsu (Google) Nov. 1, 2022, 1:29 p.m. UTC | #1
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>