Check for /dev/memcg/system/tasks before writing to it
Fixes the following errors in the logs on devices without /dev/memcg
mounted:
09-08 10:07:22.991 732 732 E Zygote : couldn't write 1124 to
/dev/memcg/system/tasks
09-08 10:07:22.986 732 732 W main : type=1400 audit(0.0:8):
avc: denied { create } for name="tasks" scontext=u:r:zygote:s0
tcontext=u:object_r:cgroup:s0 tclass=file permissive=0
Bug: 67860826
Test: boot Taimen, no more error/denial in the logs.
Change-Id: I37f481fa4e9e9116688cca4f090aa26f96f602c9
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index 32ef3dc..1407ae4 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -776,7 +776,10 @@
}
// Assign system_server to the correct memory cgroup.
- if (!WriteStringToFile(StringPrintf("%d", pid), "/dev/memcg/system/tasks")) {
+ // Not all devices mount /dev/memcg so check for the file first
+ // to avoid unnecessarily printing errors and denials in the logs.
+ if (!access("/dev/memcg/system/tasks", F_OK) &&
+ !WriteStringToFile(StringPrintf("%d", pid), "/dev/memcg/system/tasks")) {
ALOGE("couldn't write %d to /dev/memcg/system/tasks", pid);
}
}