From 9f1be12b9a0d5f1ff14b53546b0603475bec143c Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Fri, 23 Apr 2021 13:39:37 -0700 Subject: [PATCH] lmkd: Handle cases when proc_get_name() might return NULL proc_get_name() can return NULL if the corresponding process has died or open fails with ENOMEM due to memory shortages. Ensure such cases are handled without NULL pointer access. Bug: 186157675 Signed-off-by: Suren Baghdasaryan Change-Id: I05b288e3808bec0bdb73db32de02ba3a322ca6e1 --- lmkd.cpp | 6 ++++-- statslog.cpp | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lmkd.cpp b/lmkd.cpp index 4467699..7ea7c2c 100644 --- a/lmkd.cpp +++ b/lmkd.cpp @@ -1150,9 +1150,10 @@ static void cmd_procprio(LMKD_CTRL_PACKET packet, int field_count, struct ucred } else { if (!claim_record(procp, cred->pid)) { char buf[LINE_MAX]; + char *taskname = proc_get_name(cred->pid, buf, sizeof(buf)); /* Only registrant of the record can remove it */ ALOGE("%s (%d, %d) attempts to modify a process registered by another client", - proc_get_name(cred->pid, buf, sizeof(buf)), cred->uid, cred->pid); + taskname ? taskname : "A process ", cred->uid, cred->pid); return; } proc_unslot(procp); @@ -1187,9 +1188,10 @@ static void cmd_procremove(LMKD_CTRL_PACKET packet, struct ucred *cred) { if (!claim_record(procp, cred->pid)) { char buf[LINE_MAX]; + char *taskname = proc_get_name(cred->pid, buf, sizeof(buf)); /* Only registrant of the record can remove it */ ALOGE("%s (%d, %d) attempts to unregister a process registered by another client", - proc_get_name(cred->pid, buf, sizeof(buf)), cred->uid, cred->pid); + taskname ? taskname : "A process ", cred->uid, cred->pid); return; } diff --git a/statslog.cpp b/statslog.cpp index 6ac3bb5..5560b6b 100644 --- a/statslog.cpp +++ b/statslog.cpp @@ -262,7 +262,7 @@ void stats_remove_taskname(int pid) { } void stats_store_taskname(int pid, const char* taskname) { - if (!enable_stats_log) { + if (!enable_stats_log || !taskname) { return; }