diff options
-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."; |