diff options
| author | 2020-05-11 20:29:24 +0100 | |
|---|---|---|
| committer | 2020-05-21 16:41:33 +0100 | |
| commit | e15bd916b15337ee9a96a86315eefc1cf144d479 (patch) | |
| tree | 153df5878dd2aab06bceb87c10c4be5e7fbe4a89 | |
| parent | f0edf03f5b73b060d7d15c64e8e357aafe1511cd (diff) | |
Avoid potential fd leak from jniCreateFileDescriptor (1/2)
Fixes corner case leaks in android_os_{Parcel,SharedMemory}.cpp.
Bug: 155706035
Test: m
Change-Id: I91ec2c7c3f29e7232fc2baa2dce6fc3c14ce271b
| -rw-r--r-- | core/jni/android_os_Parcel.cpp | 6 | ||||
| -rw-r--r-- | core/jni/android_os_SharedMemory.cpp | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp index d723ecc13dd0..eb8d26e7bf71 100644 --- a/core/jni/android_os_Parcel.cpp +++ b/core/jni/android_os_Parcel.cpp @@ -475,7 +475,11 @@ static jobject android_os_Parcel_readFileDescriptor(JNIEnv* env, jclass clazz, j if (fd < 0) return NULL; fd = fcntl(fd, F_DUPFD_CLOEXEC, 0); if (fd < 0) return NULL; - return jniCreateFileDescriptor(env, fd); + jobject jifd = jniCreateFileDescriptor(env, fd); + if (jifd == NULL) { + close(fd); + } + return jifd; } return NULL; } diff --git a/core/jni/android_os_SharedMemory.cpp b/core/jni/android_os_SharedMemory.cpp index c33405def25e..a812c35036f3 100644 --- a/core/jni/android_os_SharedMemory.cpp +++ b/core/jni/android_os_SharedMemory.cpp @@ -69,7 +69,11 @@ jobject SharedMemory_nCreate(JNIEnv* env, jobject, jstring jname, jint size) { return nullptr; } - return jniCreateFileDescriptor(env, fd); + jobject jifd = jniCreateFileDescriptor(env, fd); + if (jifd == nullptr) { + close(fd); + } + return jifd; } jint SharedMemory_nGetSize(JNIEnv* env, jobject, jobject fileDescriptor) { |