summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2020-02-27 16:55:38 -0800
committerYabin Cui <yabinc@google.com>2020-03-03 14:04:16 -0800
commita7ada3afc51736f752c0d251e506928ff4d418f7 (patch)
tree0dbcaec50d86c73654a723a37286d2b325ee2dc1
parent19e876f0b53c09a25693e2a5687864ad3e91830d (diff)
downloadextras-a7ada3afc51736f752c0d251e506928ff4d418f7.tar.gz
simpleperf: use perf_lsm_hooks prop for permission check.
Simpleperf uses version check to see if it can record raw data. But Android hasn't updated version yet, so change to use perf_lsm_hooks prop. Bug: 149797433 Test: run simpleperf_unit_test. Change-Id: Ia1117f5f11e78a4ddd45c56bb072df30586e14c8 (cherry picked from commit c3a9bf1f5344f598a53e6c6877a394e6a3c7a66f)
-rw-r--r--simpleperf/environment.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/simpleperf/environment.cpp b/simpleperf/environment.cpp
index af14fa3f..e16e496f 100644
--- a/simpleperf/environment.cpp
+++ b/simpleperf/environment.cpp
@@ -296,12 +296,21 @@ static bool ReadPerfEventParanoid(int* value) {
}
bool CanRecordRawData() {
- if (GetAndroidVersion() >= 11) {
- // On Android R, tracepoint raw data is disabled by selinux.
- return IsRoot();
+ if (IsRoot()) {
+ return true;
}
int value;
- return ReadPerfEventParanoid(&value) && value == -1;
+ if (!ReadPerfEventParanoid(&value) || value > -1) {
+ return false;
+ }
+#if defined(__ANDROID__)
+ // If perf_event_open() is controlled by selinux, simpleperf can't record tracepoint raw data
+ // unless running as root.
+ if (android::base::GetProperty("sys.init.perf_lsm_hooks", "") == "1") {
+ return false;
+ }
+#endif
+ return true;
}
static const char* GetLimitLevelDescription(int limit_level) {