summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2021-07-06 11:36:16 +0100
committerSteve Sakoman <steve@sakoman.com>2021-07-11 06:19:43 -1000
commit317e334518c6394ecba4a3fdd4ba18b185822d22 (patch)
tree52bfd39fc04bd51bcfc6d920965f963410a77943
parent58fa175702f0cd8f00dc5e7938fb55108921d324 (diff)
downloadopenembedded-core-317e334518c6394ecba4a3fdd4ba18b185822d22.tar.gz
dwarfsrcfiles: Avoid races over debug-link files
We use dwarfsrcfiles in package.bbclass to list the source files used by a binary. This is done before they're stripped and linked to debug symbols in separate files. It is possible a binary may already have a link to separate debug symbols, e.g. some of the test binaries in lttng-tools ptest. In those cases, the linked binary may be changed by package.bbclass code whilst dwarfsrcfiles is reading it. That would result in a rare SIGBUS race causing the binary to fail. To avoid this, break the debug file search path so no other binaries are found. Also fix a segfault if no binary is specified while here. [YOCTO #14400] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit efef732859e265533acf16f2f4da3b29d50e0df4) Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r--meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c b/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c
index af7af524eb..9eb5ca807a 100644
--- a/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c
+++ b/meta/recipes-devtools/dwarfsrcfiles/files/dwarfsrcfiles.c
@@ -9,6 +9,7 @@
#include <argp.h>
#include <stdio.h>
+#include <stdlib.h>
#include <dwarf.h>
#include <elfutils/libdw.h>
@@ -83,13 +84,15 @@ process_cu (Dwarf_Die *cu_die)
int
main (int argc, char **argv)
{
- char* args[3];
+ char* args[5];
int res = 0;
Dwfl *dwfl;
Dwarf_Addr bias;
- if (argc != 2)
+ if (argc != 2) {
fprintf(stderr, "Usage %s <file>", argv[0]);
+ exit(EXIT_FAILURE);
+ }
// Pretend "dwarfsrcfiles -e <file>" was given, so we can use standard
// dwfl argp parser to open the file for us and get our Dwfl. Useful
@@ -98,8 +101,12 @@ main (int argc, char **argv)
args[0] = argv[0];
args[1] = "-e";
args[2] = argv[1];
+ // We don't want to follow debug linked files due to the way OE processes
+ // files, could race against changes in the linked binary (e.g. objcopy on it)
+ args[3] = "--debuginfo-path";
+ args[4] = "/not/exist";
- argp_parse (dwfl_standard_argp (), 3, args, 0, NULL, &dwfl);
+ argp_parse (dwfl_standard_argp (), 5, args, 0, NULL, &dwfl);
Dwarf_Die *cu = NULL;
while ((cu = dwfl_nextcu (dwfl, cu, &bias)) != NULL)