Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bb458c64 authored by Al Viro's avatar Al Viro
Browse files

Safer ABI for O_TMPFILE



[suggested by Rasmus Villemoes] make O_DIRECTORY | O_RDWR part of O_TMPFILE;
that will fail on old kernels in a lot more cases than what I came up with.
And make sure O_CREAT doesn't get there...

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 4fbeb19d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@
#define O_SYNC		(__O_SYNC|O_DSYNC)

#define O_PATH		040000000
#define O_TMPFILE	0100000000
#define __O_TMPFILE	0100000000

#define F_GETLK		7
#define F_SETLK		8
+1 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
#define O_INVISIBLE	004000000 /* invisible I/O, for DMAPI/XDSM */

#define O_PATH		020000000
#define O_TMPFILE	040000000
#define __O_TMPFILE	040000000

#define F_GETLK64	8
#define F_SETLK64	9
+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@
#define O_SYNC		(__O_SYNC|O_DSYNC)

#define O_PATH		0x1000000
#define O_TMPFILE	0x2000000
#define __O_TMPFILE	0x2000000

#define F_GETOWN	5	/*  for sockets. */
#define F_SETOWN	6	/*  for sockets. */
+1 −1
Original line number Diff line number Diff line
@@ -2977,7 +2977,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,

	file->f_flags = op->open_flag;

	if (unlikely(file->f_flags & O_TMPFILE)) {
	if (unlikely(file->f_flags & __O_TMPFILE)) {
		error = do_tmpfile(dfd, pathname, nd, flags, op, file, &opened);
		goto out;
	}
+2 −2
Original line number Diff line number Diff line
@@ -840,8 +840,8 @@ static inline int build_open_flags(int flags, umode_t mode, struct open_flags *o
	if (flags & __O_SYNC)
		flags |= O_DSYNC;

	if (flags & O_TMPFILE) {
		if (!(flags & O_CREAT))
	if (flags & __O_TMPFILE) {
		if ((flags & O_TMPFILE_MASK) != O_TMPFILE)
			return -EINVAL;
		acc_mode = MAY_OPEN | ACC_MODE(flags);
	} else if (flags & O_PATH) {
Loading