diff options
author | Yabin Cui <yabinc@google.com> | 2017-05-22 18:37:58 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-05-22 18:37:58 +0000 |
commit | 7b9a8f1ca96ec80b8b64e158a0bda07d9841eb6d (patch) | |
tree | 3cfc839e53913233a85dd8fabf856653b83c1fe5 | |
parent | 2b57f1233855835c0b90f3dfe2496df5b0960eca (diff) | |
parent | 41ed89b9794e4275e617b94431e7ccf86c87d354 (diff) | |
download | extras-7b9a8f1ca96ec80b8b64e158a0bda07d9841eb6d.tar.gz |
Merge "simpleperf: better support kernel symbols when running as root." am: fbc7062e9b am: e9488b3fec
am: 41ed89b979
Change-Id: I80c51cddc14f73a1cdc611bc1424623988007ba6
-rw-r--r-- | simpleperf/cmd_record.cpp | 4 | ||||
-rw-r--r-- | simpleperf/cmd_record_test.cpp | 1 | ||||
-rw-r--r-- | simpleperf/environment.cpp | 6 |
3 files changed, 9 insertions, 2 deletions
diff --git a/simpleperf/cmd_record.cpp b/simpleperf/cmd_record.cpp index 1eff009e..acba6abb 100644 --- a/simpleperf/cmd_record.cpp +++ b/simpleperf/cmd_record.cpp @@ -934,7 +934,9 @@ bool RecordCommand::DumpAdditionalFeatures( const std::vector<std::string>& args) { // Read data section of perf.data to collect hit file information. thread_tree_.ClearThreadAndMap(); - Dso::ReadKernelSymbolsFromProc(); + if (CheckKernelSymbolAddresses()) { + Dso::ReadKernelSymbolsFromProc(); + } auto callback = [&](const Record* r) { thread_tree_.Update(*r); if (r->type() == PERF_RECORD_SAMPLE) { diff --git a/simpleperf/cmd_record_test.cpp b/simpleperf/cmd_record_test.cpp index 0d0c44a7..571a3ca0 100644 --- a/simpleperf/cmd_record_test.cpp +++ b/simpleperf/cmd_record_test.cpp @@ -331,7 +331,6 @@ TEST(record_cmd, dump_kernel_symbols) { GTEST_LOG_(INFO) << "Test requires root privilege"; return; } - system("echo 0 >/proc/sys/kernel/kptr_restrict"); TemporaryFile tmpfile; ASSERT_TRUE(RunRecordCmd({"-a", "-o", tmpfile.path, "sleep", "1"})); std::unique_ptr<RecordFileReader> reader = RecordFileReader::CreateInstance(tmpfile.path); diff --git a/simpleperf/environment.cpp b/simpleperf/environment.cpp index 0ad2d6bd..d0cb8351 100644 --- a/simpleperf/environment.cpp +++ b/simpleperf/environment.cpp @@ -451,12 +451,18 @@ bool CheckKernelSymbolAddresses() { LOG(ERROR) << "failed to parse " << kptr_restrict_file << ": " << s; return false; } + // Accessible to everyone? if (value == 0) { return true; } + // Accessible to root? if (value == 1 && IsRoot()) { return true; } + // Can we make it accessible to us? + if (IsRoot() && android::base::WriteStringToFile("1", kptr_restrict_file)) { + return true; + } LOG(WARNING) << "Access to kernel symbol addresses is restricted. If " << "possible, please do `echo 0 >/proc/sys/kernel/kptr_restrict` " << "to fix this."; |