perf inject: Enter namespace when reading build-id
authorNamhyung Kim <namhyung@kernel.org>
Mon, 12 Oct 2020 07:02:11 +0000 (16:02 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 13 Oct 2020 13:59:42 +0000 (10:59 -0300)
It should be in a proper mnt namespace when accessing the file.

I think this had no problem since the build-id was actually read from
map__load() -> dso__load() already.  But I'd like to change it in the
following commit.

Acked-by: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20201012070214.2074921-4-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-inject.c

index 2c5e23d73a8a08274614256ca6676f8ef01b6210..670157db250217b2fa5ed73410c766bce25e8b1c 100644 (file)
@@ -23,6 +23,7 @@
 #include "util/symbol.h"
 #include "util/synthetic-events.h"
 #include "util/thread.h"
+#include "util/namespaces.h"
 #include <linux/err.h>
 
 #include <subcmd/parse-options.h>
@@ -419,16 +420,19 @@ static int perf_event__repipe_tracing_data(struct perf_session *session,
 
 static int dso__read_build_id(struct dso *dso)
 {
+       struct nscookie nsc;
+
        if (dso->has_build_id)
                return 0;
 
+       nsinfo__mountns_enter(dso->nsinfo, &nsc);
        if (filename__read_build_id(dso->long_name, dso->build_id,
                                    sizeof(dso->build_id)) > 0) {
                dso->has_build_id = true;
-               return 0;
        }
+       nsinfo__mountns_exit(&nsc);
 
-       return -1;
+       return dso->has_build_id ? 0 : -1;
 }
 
 static int dso__inject_build_id(struct dso *dso, struct perf_tool *tool,