Merge "jni: more O_CLOEXECs"
am: 0bd511611e
Change-Id: Id9eabfa92a488dbf7a27108aff8101d602e1adc9
This commit is contained in:
@@ -551,7 +551,7 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fi
|
||||
// if we only close the file descriptor and not the file object it is used to
|
||||
// create. If we don't explicitly clean up the file (which in turn closes the
|
||||
// descriptor) the buffers allocated internally by fseek will be leaked.
|
||||
int dupDescriptor = dup(descriptor);
|
||||
int dupDescriptor = fcntl(descriptor, F_DUPFD_CLOEXEC, 0);
|
||||
|
||||
FILE* file = fdopen(dupDescriptor, "r");
|
||||
if (file == NULL) {
|
||||
|
||||
@@ -132,7 +132,7 @@ static jobject ImageDecoder_nCreateFd(JNIEnv* env, jobject /*clazz*/,
|
||||
"broken file descriptor; fstat returned -1", nullptr, source);
|
||||
}
|
||||
|
||||
int dupDescriptor = dup(descriptor);
|
||||
int dupDescriptor = fcntl(descriptor, F_DUPFD_CLOEXEC, 0);
|
||||
FILE* file = fdopen(dupDescriptor, "r");
|
||||
if (file == NULL) {
|
||||
close(dupDescriptor);
|
||||
|
||||
@@ -72,7 +72,7 @@ static jlong NativeLoadFromFd(JNIEnv* env, jclass /*clazz*/, jobject file_descri
|
||||
return 0;
|
||||
}
|
||||
|
||||
unique_fd dup_fd(::dup(fd));
|
||||
unique_fd dup_fd(::fcntl(fd, F_DUPFD_CLOEXEC, 0));
|
||||
if (dup_fd < 0) {
|
||||
jniThrowIOException(env, errno);
|
||||
return 0;
|
||||
|
||||
@@ -54,7 +54,7 @@ struct Header {
|
||||
namespace android {
|
||||
|
||||
static void ReadFile(const char* path, String8& s) {
|
||||
int fd = open(path, O_RDONLY);
|
||||
int fd = open(path, O_RDONLY | O_CLOEXEC);
|
||||
if (fd != -1) {
|
||||
char bytes[1024];
|
||||
ssize_t byteCount;
|
||||
|
||||
@@ -134,7 +134,7 @@ android_hardware_SerialPort_open(JNIEnv *env, jobject thiz, jobject fileDescript
|
||||
|
||||
int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
|
||||
// duplicate the file descriptor, since ParcelFileDescriptor will eventually close its copy
|
||||
fd = dup(fd);
|
||||
fd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
|
||||
if (fd < 0) {
|
||||
jniThrowException(env, "java/io/IOException", "Could not open serial port");
|
||||
return;
|
||||
|
||||
@@ -49,7 +49,7 @@ android_hardware_UsbDeviceConnection_open(JNIEnv *env, jobject thiz, jstring dev
|
||||
{
|
||||
int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
|
||||
// duplicate the file descriptor, since ParcelFileDescriptor will eventually close its copy
|
||||
fd = dup(fd);
|
||||
fd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
|
||||
if (fd < 0)
|
||||
return JNI_FALSE;
|
||||
|
||||
|
||||
@@ -943,7 +943,7 @@ static bool openFile(JNIEnv* env, jobject fileDescriptor, UniqueFile& fp)
|
||||
}
|
||||
|
||||
/* dup() the descriptor so we don't close the original with fclose() */
|
||||
int fd = dup(origFd);
|
||||
int fd = fcntl(origFd, F_DUPFD_CLOEXEC, 0);
|
||||
if (fd < 0) {
|
||||
ALOGW("dup(%d) failed: %s\n", origFd, strerror(errno));
|
||||
jniThrowRuntimeException(env, "dup() failed");
|
||||
|
||||
@@ -37,7 +37,7 @@ static std::string buildFileName(const std::string& locale) {
|
||||
|
||||
static const uint8_t* mmapPatternFile(const std::string& locale) {
|
||||
const std::string hyFilePath = buildFileName(locale);
|
||||
const int fd = open(hyFilePath.c_str(), O_RDONLY);
|
||||
const int fd = open(hyFilePath.c_str(), O_RDONLY | O_CLOEXEC);
|
||||
if (fd == -1) {
|
||||
return nullptr; // Open failed.
|
||||
}
|
||||
|
||||
@@ -1158,7 +1158,7 @@ static int getprocname(pid_t pid, char *buf, size_t len) {
|
||||
FILE *f;
|
||||
|
||||
snprintf(filename, sizeof(filename), "/proc/%d/cmdline", pid);
|
||||
f = fopen(filename, "r");
|
||||
f = fopen(filename, "re");
|
||||
if (!f) {
|
||||
*buf = '\0';
|
||||
return 1;
|
||||
|
||||
@@ -40,7 +40,7 @@ static jmethodID method_onEvent;
|
||||
static jint android_os_fileobserver_init(JNIEnv* env, jobject object)
|
||||
{
|
||||
#if defined(__linux__)
|
||||
return (jint)inotify_init();
|
||||
return (jint)inotify_init1(IN_CLOEXEC);
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
@@ -125,7 +125,7 @@ isFileDifferent(const char* filePath, uint32_t fileSize, time_t modifiedTime,
|
||||
return true;
|
||||
}
|
||||
|
||||
int fd = TEMP_FAILURE_RETRY(open(filePath, O_RDONLY));
|
||||
int fd = TEMP_FAILURE_RETRY(open(filePath, O_RDONLY | O_CLOEXEC));
|
||||
if (fd < 0) {
|
||||
ALOGV("Couldn't open file %s: %s", filePath, strerror(errno));
|
||||
return true;
|
||||
@@ -565,7 +565,7 @@ com_android_internal_content_NativeLibraryHelper_openApkFd(JNIEnv *env, jclass,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dupedFd = dup(fd);
|
||||
int dupedFd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
|
||||
if (dupedFd == -1) {
|
||||
jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
|
||||
"Failed to dup FileDescriptor: %s", strerror(errno));
|
||||
|
||||
@@ -95,7 +95,7 @@ static jlongArray get_long_array(JNIEnv* env, jobject obj, jfieldID field, int s
|
||||
static int legacyReadNetworkStatsDetail(std::vector<stats_line>* lines,
|
||||
const std::vector<std::string>& limitIfaces,
|
||||
int limitTag, int limitUid, const char* path) {
|
||||
FILE* fp = fopen(path, "r");
|
||||
FILE* fp = fopen(path, "re");
|
||||
if (fp == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user