mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 00:20:08 +00:00
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] (From OE-Core rev: efef732859e265533acf16f2f4da3b29d50e0df4) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include <argp.h>
|
#include <argp.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <dwarf.h>
|
#include <dwarf.h>
|
||||||
#include <elfutils/libdw.h>
|
#include <elfutils/libdw.h>
|
||||||
@@ -83,13 +84,15 @@ process_cu (Dwarf_Die *cu_die)
|
|||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
char* args[3];
|
char* args[5];
|
||||||
int res = 0;
|
int res = 0;
|
||||||
Dwfl *dwfl;
|
Dwfl *dwfl;
|
||||||
Dwarf_Addr bias;
|
Dwarf_Addr bias;
|
||||||
|
|
||||||
if (argc != 2)
|
if (argc != 2) {
|
||||||
fprintf(stderr, "Usage %s <file>", argv[0]);
|
fprintf(stderr, "Usage %s <file>", argv[0]);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
// Pretend "dwarfsrcfiles -e <file>" was given, so we can use standard
|
// 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
|
// 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[0] = argv[0];
|
||||||
args[1] = "-e";
|
args[1] = "-e";
|
||||||
args[2] = argv[1];
|
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;
|
Dwarf_Die *cu = NULL;
|
||||||
while ((cu = dwfl_nextcu (dwfl, cu, &bias)) != NULL)
|
while ((cu = dwfl_nextcu (dwfl, cu, &bias)) != NULL)
|
||||||
|
|||||||
Reference in New Issue
Block a user