glibc/io
Eric Rannaud 65f6f938cd linux: open and openat ignore 'mode' with O_TMPFILE in flags
Both open and openat load their last argument 'mode' lazily, using
va_arg() only if O_CREAT is found in oflag. This is wrong, mode is also
necessary if O_TMPFILE is in oflag.

By chance on x86_64, the problem wasn't evident when using O_TMPFILE
with open, as the 3rd argument of open, even when not loaded with
va_arg, is left untouched in RDX, where the syscall expects it.

However, openat was not so lucky, and O_TMPFILE couldn't be used: mode
is the 4th argument, in RCX, but the syscall expects its 4th argument in
a different register than the glibc wrapper, in R10.

Introduce a macro __OPEN_NEEDS_MODE (oflag) to test if either O_CREAT or
O_TMPFILE is set in oflag.

Tested on Linux x86_64.

	[BZ #17523]
	* io/fcntl.h (__OPEN_NEEDS_MODE): New macro.
	* io/bits/fcntl2.h (open): Use it.
	(openat): Likewise.
	* io/open.c (__libc_open): Likewise.
	* io/open64.c (__libc_open64): Likewise.
	* io/open64_2.c (__open64_2): Likewise.
	* io/open_2.c (__open_2): Likewise.
	* io/openat.c (__openat): Likewise.
	* io/openat64.c (__openat64): Likewise.
	* io/openat64_2.c (__openat64_2): Likewise.
	* io/openat_2.c (__openat_2): Likewise.
	* sysdeps/mach/hurd/open.c (__libc_open): Likewise.
	* sysdeps/mach/hurd/openat.c (__openat): Likewise.
	* sysdeps/posix/open64.c (__libc_open64): Likewise.
	* sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
	* sysdeps/unix/sysv/linux/generic/open.c (__libc_open): Likewise.
	(__open_nocancel): Likewise.
	* sysdeps/unix/sysv/linux/generic/open64.c (__libc_open64): Likewise.
	* sysdeps/unix/sysv/linux/open64.c (__libc_open64): Likewise.
	* sysdeps/unix/sysv/linux/openat.c (__OPENAT): Likewise.
2015-02-24 13:19:22 +05:30
..
bits linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
sys Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Makefile Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Versions * Versions.def (glibc): Add GLIBC_2.9. 2008-07-25 04:51:56 +00:00
access.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bug-ftw1.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bug-ftw2.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bug-ftw3.c Update. 2002-02-07 17:54:45 +00:00
bug-ftw4.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bug-ftw5.c [BZ #4076] 2007-02-21 09:36:46 +00:00
chdir.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
chmod.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
chown.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
close.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
creat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
creat64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dup.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dup2.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dup3.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
euidaccess.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
faccessat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fchdir.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fchmod.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fchmodat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fchown.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fchownat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fcntl.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fcntl.h linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
flock.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fstat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fstat64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fstatat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fstatat64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fstatfs.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fstatfs64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fstatvfs.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fstatvfs64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fts.c Tiny refactoring in fts to eliminate a warning. 2014-10-20 15:32:45 -07:00
fts.h Update. 2003-09-12 22:37:19 +00:00
ftw.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ftw.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ftw64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ftwtest-sh Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ftwtest.c Update. 2003-11-07 23:00:00 +00:00
futimens.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fxstat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fxstat64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fxstatat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fxstatat64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
getcwd.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
getdirname.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
getwd.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
have_o_cloexec.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
isatty.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lchmod.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lchown.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
link.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
linkat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lockf.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lockf64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lseek.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lseek64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lstat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lstat64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lxstat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lxstat64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mkdir.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mkdirat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mkfifo.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mkfifoat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mknod.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mknodat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
open.c linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
open64.c linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
open64_2.c linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
open_2.c linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
openat.c linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
openat64.c linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
openat64_2.c linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
openat_2.c linux: open and openat ignore 'mode' with O_TMPFILE in flags 2015-02-24 13:19:22 +05:30
pipe.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
pipe2.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
poll.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
poll.h initial import 1995-02-18 01:27:10 +00:00
posix_fadvise.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
posix_fadvise64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
posix_fallocate.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
posix_fallocate64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ppoll.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
pwd.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
read.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
readlink.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
readlinkat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
rmdir.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sendfile.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sendfile64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
stat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
stat64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
statfs.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
statfs64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
statvfs.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
statvfs64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
symlink.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
symlinkat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-lfs.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-stat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-stat2.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
test-utime.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
tst-faccessat.c * sysdeps/unix/sysv/linux/renameat.c (__atfct_seterrno_2): Correcty 2006-01-22 00:57:24 +00:00
tst-fchmodat.c * sysdeps/unix/sysv/linux/renameat.c (__atfct_seterrno_2): Correcty 2006-01-22 00:57:24 +00:00
tst-fchownat.c * io/tst-fchownat.c: Correctly handle _POSIX_CHOWN_RESTRICTED 2008-03-08 05:21:41 +00:00
tst-fcntl.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
tst-fstatat.c * sysdeps/unix/sysv/linux/renameat.c (__atfct_seterrno_2): Correcty 2006-01-22 00:57:24 +00:00
tst-futimesat.c * io/Makefile (routines): Add fstatat, fstatat64, fxstatat, fxstatat64, 2005-11-11 20:02:07 +00:00
tst-getcwd.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
tst-linkat.c (do_test): Pass new parameter to linkat. 2006-02-27 00:59:21 +00:00
tst-mkdirat.c * io/Makefile (tests): Add tst-symlinkat, tst-linkat, tst-readlinkat, 2006-01-20 23:24:42 +00:00
tst-mkfifoat.c * io/Makefile (tests): Add tst-symlinkat, tst-linkat, tst-readlinkat, 2006-01-20 23:24:42 +00:00
tst-mknodat.c tst-mknodat: create a FIFO instead of a socket 2012-09-28 21:33:52 +02:00
tst-openat.c * sysdeps/unix/sysv/linux/renameat.c (__atfct_seterrno_2): Correcty 2006-01-22 00:57:24 +00:00
tst-posix_fallocate.c Include <fcntl.h>. 2007-07-28 18:04:22 +00:00
tst-readlinkat.c * io/Makefile (tests): Add tst-symlinkat, tst-linkat, and 2006-01-20 21:55:16 +00:00
tst-renameat.c * sysdeps/unix/sysv/linux/renameat.c (__atfct_seterrno_2): Correcty 2006-01-22 00:57:24 +00:00
tst-statvfs.c Update. 2003-10-27 04:05:04 +00:00
tst-symlinkat.c * io/Makefile (tests): Add tst-symlinkat, tst-linkat, and 2006-01-20 21:55:16 +00:00
tst-ttyname_r.c * nis/nis_subr.c (nis_getnames): Revert last change. 2006-12-05 21:28:15 +00:00
tst-unlinkat.c * io/Makefile (routines): Add fstatat, fstatat64, fxstatat, fxstatat64, 2005-11-11 20:02:07 +00:00
ttyname.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ttyname_r.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
umask.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
unlink.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
unlinkat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
utime.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
utime.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
utimensat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
write.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
xmknod.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
xmknodat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
xstat.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
xstat64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00