fopen vs. os::fopen and automatic closing of the file on exec
Baesken, Matthias
matthias.baesken at sap.com
Wed Jan 29 09:38:58 UTC 2020
Hi David , yes you are probably right, simply adding it always in the jdk coding would lead to problems .
On the other hand, do I have the option to set O_CLOEXEC in some way for the jdk open calls , in case I want it ?
Best regards, Matthias
> Hi Matthias,
>
> On 28/01/2020 11:44 pm, Baesken, Matthias wrote:
> > Hi David, thanks for looking into it .
> >
> > While checking other open(64) calls, I found the fileOpen / handleOpen
> calls in java.base .
> > Looks like they miss so far setting FD_CLOEXEC / O_CLOEXEC , it isn’t
> done in the callers of those functions and it is also not (silently) added in the
> fileOpen/handleOpen function itself (like HS does in os::open ).
> > See :
> >
> > 73FD
> > 74handleOpen(const char *path, int oflag, int mode) {
> > 75 FD fd;
> > 76 RESTARTABLE(open64(path, oflag, mode), fd);
> > 77 if (fd != -1) {
> > 78 struct stat64 buf64;
> > 79 int result;
> > 80 RESTARTABLE(fstat64(fd, &buf64), result);
> > 81 if (result != -1) {
> > 82 if (S_ISDIR(buf64.st_mode)) {
> > 83 close(fd);
> > 84 errno = EISDIR;
> > 85 fd = -1;
> > 86 }
> > 87 } else {
> > 88 close(fd);
> > 89 fd = -1;
> > 90 }
> > 91 }
> > 92 return fd;
> > 93}
> >
> > 95void
> > 96fileOpen(JNIEnv *env, jobject this, jstring path, jfieldID fid, int flags)
> > 97{
> > .....
> > 107 fd = handleOpen(ps, flags, 0666);
> > ....
> > 122}
> >
> > 56JNIEXPORT void JNICALL
> > 57Java_java_io_FileOutputStream_open0(JNIEnv *env, jobject this,
> > 58 jstring path, jboolean append) {
> > 59 fileOpen(env, this, path, fos_fd,
> > 60 O_WRONLY | O_CREAT | (append ? O_APPEND : O_TRUNC));
> > 61}
> >
> > 59JNIEXPORT void JNICALL
> > 60Java_java_io_FileInputStream_open0(JNIEnv *env, jobject this, jstring
> path) {
> > 61 fileOpen(env, this, path, fis_fd, O_RDONLY);
> > 62}
> >
> >
> > Is this something that should be changed too ?
>
> I think not. Unless those public API's are specified to open a file in a
> specific mode, like close-on-exec, then they should not do that by default.
>
> We should only be doing close-on-exec on internally used files.
>
> David
> -----
More information about the hotspot-dev
mailing list