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

Commit d0916f9b authored by Lokesh Kumar Goel's avatar Lokesh Kumar Goel Committed by Android Build Coastguard Worker
Browse files

Revert "Pass the correct user ID to SetProcessProfilesCached()"

This reverts commit 27db51c4.

Reason for revert: New patch available which replaces this change.

Bug: 313578691
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e1c4dbc802b103b1a8585cdea74de41eb33cb3ac)
Merged-In: Iff5a50df0dc36428b8509f9f972137f69b932766
Change-Id: Iff5a50df0dc36428b8509f9f972137f69b932766
parent 285fba2c
Loading
Loading
Loading
Loading
+1 −32
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@
#include <meminfo/sysmeminfo.h>
#include <processgroup/processgroup.h>
#include <processgroup/sched_policy.h>
#include <android-base/logging.h>
#include <android-base/unique_fd.h>

#include <algorithm>
@@ -233,31 +232,6 @@ void android_os_Process_setThreadGroupAndCpuset(JNIEnv* env, jobject clazz, int
    }
}

// Look up the user ID of a process in /proc/${pid}/status. The Uid: line is present in
// /proc/${pid}/status since at least kernel v2.5.
static int uid_from_pid(int pid)
{
    int uid = -1;
    std::array<char, 64> path;
    int res = snprintf(path.data(), path.size(), "/proc/%d/status", pid);
    if (res < 0 || res >= static_cast<int>(path.size())) {
        DCHECK(false);
        return uid;
    }
    FILE* f = fopen(path.data(), "r");
    if (!f) {
        return uid;
    }
    char line[256];
    while (fgets(line, sizeof(line), f)) {
        if (sscanf(line, "Uid: %d", &uid) == 1) {
            break;
        }
    }
    fclose(f);
    return uid;
}

void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jint grp)
{
    ALOGV("%s pid=%d grp=%" PRId32, __func__, pid, grp);
@@ -301,12 +275,7 @@ void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jin
        }
    }

    const int uid = uid_from_pid(pid);
    if (uid < 0) {
        signalExceptionForGroupError(env, ESRCH, pid);
        return;
    }
    if (!SetProcessProfilesCached(uid, pid, {get_cpuset_policy_profile_name((SchedPolicy)grp)}))
    if (!SetProcessProfilesCached(0, pid, {get_cpuset_policy_profile_name((SchedPolicy)grp)}))
        signalExceptionForGroupError(env, errno ? errno : EPERM, pid);
}