summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Josh Gao <jmgao@google.com> 2018-07-20 21:49:00 -0700
committer android-build-merger <android-build-merger@google.com> 2018-07-20 21:49:00 -0700
commitc671d623c4b9f2edce7516e6343f6bb16d1573bd (patch)
tree4c2963a8900cc2b7eb8d7290f96771a1596dd58e
parenta31b0cf871e8db41f39f9fa73a08b6aeba1c9dc1 (diff)
parentf28713990b89e1749bf475d7867649e985842158 (diff)
Merge changes from topic "bionic_fdsan_java" am: bb352287c9 am: 1fad55e868
am: f28713990b Change-Id: I2f55eca5d6d2301905f37200f083949972170e40
-rw-r--r--core/java/android/os/Parcel.java14
-rw-r--r--core/java/android/os/ParcelFileDescriptor.java9
-rw-r--r--core/jni/android_os_Parcel.cpp88
-rw-r--r--core/jni/com_android_internal_os_Zygote.cpp6
4 files changed, 13 insertions, 104 deletions
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index 3bf170980e29..c7ebc8905692 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -38,7 +38,6 @@ import libcore.util.SneakyThrow;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
-import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
@@ -2074,19 +2073,6 @@ public final class Parcel {
}
}
- /** @deprecated use {@link android.system.Os#open(String, int, int)} */
- @Deprecated
- static native FileDescriptor openFileDescriptor(String file, int mode)
- throws FileNotFoundException;
-
- /** @deprecated use {@link android.system.Os#dup(FileDescriptor)} */
- @Deprecated
- static native FileDescriptor dupFileDescriptor(FileDescriptor orig) throws IOException;
-
- /** @deprecated use {@link android.system.Os#close(FileDescriptor)} */
- @Deprecated
- static native void closeFileDescriptor(FileDescriptor desc) throws IOException;
-
/**
* Read a byte value from the parcel at the current dataPosition().
*/
diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java
index 7556f0921b4d..c9edc531d134 100644
--- a/core/java/android/os/ParcelFileDescriptor.java
+++ b/core/java/android/os/ParcelFileDescriptor.java
@@ -188,7 +188,13 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
}
mWrapped = null;
mFd = fd;
+ IoUtils.setFdOwner(mFd, this);
+
mCommFd = commChannel;
+ if (mCommFd != null) {
+ IoUtils.setFdOwner(mCommFd, this);
+ }
+
mGuard.open("close");
}
@@ -682,8 +688,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable {
if (mClosed) {
throw new IllegalStateException("Already closed");
}
- final int fd = getFd();
- mFd.setInt$(-1);
+ int fd = IoUtils.acquireRawFd(mFd);
writeCommStatusAndClose(Status.DETACHED, null);
mClosed = true;
mGuard.close();
diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp
index 5e2cd4001d23..bed239f97951 100644
--- a/core/jni/android_os_Parcel.cpp
+++ b/core/jni/android_os_Parcel.cpp
@@ -470,90 +470,6 @@ static jobject android_os_Parcel_readFileDescriptor(JNIEnv* env, jclass clazz, j
return NULL;
}
-static jobject android_os_Parcel_openFileDescriptor(JNIEnv* env, jclass clazz,
- jstring name, jint mode)
-{
- if (name == NULL) {
- jniThrowNullPointerException(env, NULL);
- return NULL;
- }
- ScopedUtfChars name8(env, name);
- if (name8.c_str() == NULL) {
- return NULL;
- }
-
- int flags=0;
- switch (mode&0x30000000) {
- case 0:
- case 0x10000000:
- flags = O_RDONLY;
- break;
- case 0x20000000:
- flags = O_WRONLY;
- break;
- case 0x30000000:
- flags = O_RDWR;
- break;
- }
-
- if (mode&0x08000000) flags |= O_CREAT;
- if (mode&0x04000000) flags |= O_TRUNC;
- if (mode&0x02000000) flags |= O_APPEND;
-
- int realMode = S_IRWXU|S_IRWXG;
- if (mode&0x00000001) realMode |= S_IROTH;
- if (mode&0x00000002) realMode |= S_IWOTH;
-
- int fd = open(name8.c_str(), flags, realMode);
- if (fd < 0) {
- jniThrowException(env, "java/io/FileNotFoundException", strerror(errno));
- return NULL;
- }
- jobject object = jniCreateFileDescriptor(env, fd);
- if (object == NULL) {
- close(fd);
- }
- return object;
-}
-
-static jobject android_os_Parcel_dupFileDescriptor(JNIEnv* env, jclass clazz, jobject orig)
-{
- if (orig == NULL) {
- jniThrowNullPointerException(env, NULL);
- return NULL;
- }
- int origfd = jniGetFDFromFileDescriptor(env, orig);
- if (origfd < 0) {
- jniThrowException(env, "java/lang/IllegalArgumentException", "bad FileDescriptor");
- return NULL;
- }
-
- int fd = dup(origfd);
- if (fd < 0) {
- jniThrowIOException(env, errno);
- return NULL;
- }
- jobject object = jniCreateFileDescriptor(env, fd);
- if (object == NULL) {
- close(fd);
- }
- return object;
-}
-
-static void android_os_Parcel_closeFileDescriptor(JNIEnv* env, jclass clazz, jobject object)
-{
- if (object == NULL) {
- jniThrowNullPointerException(env, NULL);
- return;
- }
- int fd = jniGetFDFromFileDescriptor(env, object);
- if (fd >= 0) {
- jniSetFileDescriptorOfFD(env, object, -1);
- //ALOGI("Closing ParcelFileDescriptor %d\n", fd);
- close(fd);
- }
-}
-
static jlong android_os_Parcel_create(JNIEnv* env, jclass clazz)
{
Parcel* parcel = new Parcel();
@@ -796,10 +712,6 @@ static const JNINativeMethod gParcelMethods[] = {
{"nativeReadStrongBinder", "(J)Landroid/os/IBinder;", (void*)android_os_Parcel_readStrongBinder},
{"nativeReadFileDescriptor", "(J)Ljava/io/FileDescriptor;", (void*)android_os_Parcel_readFileDescriptor},
- {"openFileDescriptor", "(Ljava/lang/String;I)Ljava/io/FileDescriptor;", (void*)android_os_Parcel_openFileDescriptor},
- {"dupFileDescriptor", "(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;", (void*)android_os_Parcel_dupFileDescriptor},
- {"closeFileDescriptor", "(Ljava/io/FileDescriptor;)V", (void*)android_os_Parcel_closeFileDescriptor},
-
{"nativeCreate", "()J", (void*)android_os_Parcel_create},
{"nativeFreeBuffer", "(J)J", (void*)android_os_Parcel_freeBuffer},
{"nativeDestroy", "(J)V", (void*)android_os_Parcel_destroy},
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index e30a3e7adc0c..0022cf889098 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -24,6 +24,7 @@
#include <sstream>
#include <string>
+#include <android/fdsan.h>
#include <fcntl.h>
#include <grp.h>
#include <inttypes.h>
@@ -793,6 +794,8 @@ static pid_t ForkCommon(JNIEnv* env, jstring java_se_name, bool is_system_server
fail_fn(error_msg);
}
+ android_fdsan_error_level fdsan_error_level = android_fdsan_get_error_level();
+
pid_t pid = fork();
if (pid == 0) {
@@ -809,6 +812,9 @@ static pid_t ForkCommon(JNIEnv* env, jstring java_se_name, bool is_system_server
if (!gOpenFdTable->ReopenOrDetach(&error_msg)) {
fail_fn(error_msg);
}
+
+ // Turn fdsan back on.
+ android_fdsan_set_error_level(fdsan_error_level);
}
// We blocked SIGCHLD prior to a fork, we unblock it here.