diff options
| author | 2023-12-14 17:59:57 +0000 | |
|---|---|---|
| committer | 2023-12-14 17:59:57 +0000 | |
| commit | 2642c8388a11b4a69b2f13aa230dbb4dabd5f575 (patch) | |
| tree | f783b8bbb4983363ad7146b8ecc760af213b5d7f | |
| parent | 05757a85be5ff5d60e0c7a2fb95ebe6b68b05735 (diff) | |
| parent | 23388759623a16b68c7cc138d85ec8fb513e568e (diff) | |
Merge "Throw exception for negative UIDs/GIDs" into main am: 2338875962
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2868961
Change-Id: Id29a2c0bc2567ba06ace3cebcf8ecdeeaffd4510
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | core/jni/android_util_Process.cpp | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp index 91dfc6023e42..55100a5347fd 100644 --- a/core/jni/android_util_Process.cpp +++ b/core/jni/android_util_Process.cpp @@ -282,6 +282,11 @@ void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jin void android_os_Process_setProcessFrozen( JNIEnv *env, jobject clazz, jint pid, jint uid, jboolean freeze) { + if (uid < 0) { + jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "uid is negative: %d", uid); + return; + } + bool success = true; if (freeze) { @@ -305,6 +310,11 @@ jint android_os_Process_getProcessGroup(JNIEnv* env, jobject clazz, jint pid) } jint android_os_Process_createProcessGroup(JNIEnv* env, jobject clazz, jint uid, jint pid) { + if (uid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "uid is negative: %d", uid); + } + return createProcessGroup(uid, pid); } @@ -590,12 +600,21 @@ void android_os_Process_setArgV0(JNIEnv* env, jobject clazz, jstring name) jint android_os_Process_setUid(JNIEnv* env, jobject clazz, jint uid) { + if (uid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "uid is negative: %d", uid); + } + return setuid(uid) == 0 ? 0 : errno; } -jint android_os_Process_setGid(JNIEnv* env, jobject clazz, jint uid) -{ - return setgid(uid) == 0 ? 0 : errno; +jint android_os_Process_setGid(JNIEnv* env, jobject clazz, jint gid) { + if (gid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "gid is negative: %d", gid); + } + + return setgid(gid) == 0 ? 0 : errno; } static int pid_compare(const void* v1, const void* v2) @@ -1235,11 +1254,21 @@ jintArray android_os_Process_getPidsForCommands(JNIEnv* env, jobject clazz, jint android_os_Process_killProcessGroup(JNIEnv* env, jobject clazz, jint uid, jint pid) { + if (uid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "uid is negative: %d", uid); + } + return killProcessGroup(uid, pid, SIGKILL); } jint android_os_Process_sendSignalToProcessGroup(JNIEnv* env, jobject clazz, jint uid, jint pid, jint signal) { + if (uid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "uid is negative: %d", uid); + } + return sendSignalToProcessGroup(uid, pid, signal); } @@ -1258,6 +1287,11 @@ static jint android_os_Process_nativePidFdOpen(JNIEnv* env, jobject, jint pid, j } void android_os_Process_freezeCgroupUID(JNIEnv* env, jobject clazz, jint uid, jboolean freeze) { + if (uid < 0) { + jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "uid is negative: %d", uid); + return; + } + bool success = true; if (freeze) { |