Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a3c3f7c authored by Bart Van Assche's avatar Bart Van Assche
Browse files

libprocessgroup: Check validity of uid and pid arguments



A user ID (uid) must be greater than or equal to zero to be valid. Only
strictly positive process IDs are valid. Add argument checks in
libprocessgroup of uid and pid arguments to make it easier to determine
the origin of invalid arguments.

Change-Id: I8a6d96ca4576bc9c329498c6a804dd05a02afca5
Signed-off-by: default avatarBart Van Assche <bvanassche@google.com>
parent eef0f563
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -446,14 +446,9 @@ static int DoKillProcessGroupOnce(const char* cgroup, uid_t uid, int initialPid,

static int KillProcessGroup(uid_t uid, int initialPid, int signal, int retries,
                            int* max_processes) {
    if (uid < 0) {
        LOG(ERROR) << __func__ << ": invalid UID " << uid;
        return -1;
    }
    if (initialPid <= 0) {
        LOG(ERROR) << __func__ << ": invalid PID " << initialPid;
        return -1;
    }
    CHECK_GE(uid, 0);
    CHECK_GT(initialPid, 0);

    std::string hierarchy_root_path;
    if (CgroupsAvailable()) {
        CgroupGetControllerPath(CGROUPV2_CONTROLLER_NAME, &hierarchy_root_path);
@@ -590,7 +585,8 @@ static int createProcessGroupInternal(uid_t uid, int initialPid, std::string cgr
}

int createProcessGroup(uid_t uid, int initialPid, bool memControl) {
    std::string cgroup;
    CHECK_GE(uid, 0);
    CHECK_GT(initialPid, 0);

    if (memControl && !UsePerAppMemcg()) {
        PLOG(ERROR) << "service memory controls are used without per-process memory cgroup support";
@@ -608,6 +604,7 @@ int createProcessGroup(uid_t uid, int initialPid, bool memControl) {
        }
    }

    std::string cgroup;
    CgroupGetControllerPath(CGROUPV2_CONTROLLER_NAME, &cgroup);
    return createProcessGroupInternal(uid, initialPid, cgroup, true);
}