diff options
author | Yabin Cui <yabinc@google.com> | 2017-05-22 18:31:26 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-05-22 18:31:26 +0000 |
commit | 41ed89b9794e4275e617b94431e7ccf86c87d354 (patch) | |
tree | a93c966e8c1c131d5867e5f58c289d31e80391af | |
parent | 4d01701b65e54597a867c5e73f669a6464d93b47 (diff) | |
parent | e9488b3feca82a8e1a5b6700eba386c49f35f499 (diff) | |
download | extras-41ed89b9794e4275e617b94431e7ccf86c87d354.tar.gz |
Merge "simpleperf: better support kernel symbols when running as root." am: fbc7062e9b
am: e9488b3fec
Change-Id: I3328a1bfa0209b2ae39302e642051940795f70b0
-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."; |