summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Orion Hodson <oth@google.com> 2020-05-11 20:29:24 +0100
committer Orion Hodson <oth@google.com> 2020-05-21 16:41:33 +0100
commite15bd916b15337ee9a96a86315eefc1cf144d479 (patch)
tree153df5878dd2aab06bceb87c10c4be5e7fbe4a89
parentf0edf03f5b73b060d7d15c64e8e357aafe1511cd (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.cpp6
-rw-r--r--core/jni/android_os_SharedMemory.cpp6
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) {