From 4ffe8a3109eceb7d2cb3d52c966784bc160f12ee Mon Sep 17 00:00:00 2001 From: Akilesh Kailash Date: Thu, 2 Jun 2022 08:00:39 +0000 Subject: [PATCH] init: Set oom_score_adj to snapuserd process When a process is started as a native service, oom_score_adj is set to -1000 so that processes are unkillable by lmkd. During boot, snapuserd process is not started as a service; hence, we need to set the oom_score_adj explicitly else in the event of low memory situation, lmkd can kill the process thereby device can never boot. Bug: 234691483 Test: th and OTA on Pixel Signed-off-by: Akilesh Kailash Change-Id: Ic2c85aa470522b4bc847a16b4f5cebfc528ed3cf --- init/snapuserd_transition.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/init/snapuserd_transition.cpp b/init/snapuserd_transition.cpp index 5deaf3156..5c821b05c 100644 --- a/init/snapuserd_transition.cpp +++ b/init/snapuserd_transition.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -40,6 +41,7 @@ #include #include "block_dev_initializer.h" +#include "lmkd_service.h" #include "service_utils.h" #include "util.h" @@ -320,6 +322,14 @@ void SnapuserdSelinuxHelper::RelaunchFirstStageSnapuserd() { LOG(INFO) << "Relaunched snapuserd with pid: " << pid; + // Since daemon is not started as a service, we have + // to explicitly set the OOM score to default which is unkillable + std::string oom_str = std::to_string(DEFAULT_OOM_SCORE_ADJUST); + std::string oom_file = android::base::StringPrintf("/proc/%d/oom_score_adj", pid); + if (!android::base::WriteStringToFile(oom_str, oom_file)) { + PLOG(ERROR) << "couldn't write oom_score_adj to snapuserd daemon with pid: " << pid; + } + if (!TestSnapuserdIsReady()) { PLOG(FATAL) << "snapuserd daemon failed to launch"; } else {