lmkd: Support process types when registering a process
Add an optional process type field into lmkd registration protocol so that
applications can be distinguished from services.
Bug: 129011369
Test: boot and verify native service registration
Change-Id: Ie610b5d07cbe247a55ab31bc079ee5c5923bea11
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
diff --git a/lmkd/lmkd.c b/lmkd/lmkd.c
index 1edd772..4352498 100644
--- a/lmkd/lmkd.c
+++ b/lmkd/lmkd.c
@@ -876,7 +876,7 @@
}
}
-static void cmd_procprio(LMKD_CTRL_PACKET packet, struct ucred *cred) {
+static void cmd_procprio(LMKD_CTRL_PACKET packet, int field_count, struct ucred *cred) {
struct proc *procp;
char path[LINE_MAX];
char val[20];
@@ -886,7 +886,7 @@
struct passwd *pwdrec;
int tgid;
- lmkd_pack_get_procprio(packet, ¶ms);
+ lmkd_pack_get_procprio(packet, field_count, ¶ms);
if (params.oomadj < OOM_SCORE_ADJ_MIN ||
params.oomadj > OOM_SCORE_ADJ_MAX) {
@@ -894,6 +894,11 @@
return;
}
+ if (params.ptype < PROC_TYPE_FIRST || params.ptype >= PROC_TYPE_COUNT) {
+ ALOGE("Invalid PROCPRIO process type argument %d", params.ptype);
+ return;
+ }
+
/* Check if registered process is a thread group leader */
tgid = proc_get_tgid(params.pid);
if (tgid >= 0 && tgid != params.pid) {
@@ -920,7 +925,8 @@
return;
}
- if (per_app_memcg) {
+ /* lmkd should not change soft limits for services */
+ if (params.ptype == PROC_TYPE_APP && per_app_memcg) {
if (params.oomadj >= 900) {
soft_limit_mult = 0;
} else if (params.oomadj >= 800) {
@@ -1298,9 +1304,10 @@
cmd_target(targets, packet);
break;
case LMK_PROCPRIO:
- if (nargs != 3)
+ /* process type field is optional for backward compatibility */
+ if (nargs < 3 || nargs > 4)
goto wronglen;
- cmd_procprio(packet, &cred);
+ cmd_procprio(packet, nargs, &cred);
break;
case LMK_PROCREMOVE:
if (nargs != 1)