Thread (1 message) 1 message, 1 author, 2016-09-26

Re: Naming O_TMPFILE files

From: Florian Weimer <hidden>
Date: 2016-09-26 15:11:42
Also in: linux-fsdevel, linux-man

* Michael Kerrisk:
On 09/23/2016 10:41 AM, Florian Weimer wrote:
quoted
quoted
The attached test program prints under a non-privileged user:

error: linkat (fd, "", AT_FDCWD, out_name, AT_EMPTY_PATH):
  No such file or directory
error: linkat (fd, "", current_fd, out_name, AT_EMPTY_PATH):
  No such file or directory
success: linkat (AT_FDCWD, proc_name, AT_FDCWD, out_name,
AT_SYMLINK_FOLLOW)
error: linkat (AT_FDCWD, proc_name, current_fd, out_name,
AT_SYMLINK_FOLLOW):
  No such file or directory
error: linkat (proc_fd, proc_name, AT_FDCWD, out_name, AT_SYMLINK_FOLLOW):
  No such file or directory
error: linkat (proc_fd, proc_name, current_fd, out_name,
AT_SYMLINK_FOLLOW):
  No such file or directory
successes: 1, failures: 5

And under a privileged user:

success: linkat (fd, "", AT_FDCWD, out_name, AT_EMPTY_PATH)
error: linkat (fd, "", current_fd, out_name, AT_EMPTY_PATH):
  No such file or directory
error: linkat (AT_FDCWD, proc_name, AT_FDCWD, out_name, AT_SYMLINK_FOLLOW):
  No such file or directory
error: linkat (AT_FDCWD, proc_name, current_fd, out_name,
AT_SYMLINK_FOLLOW):
  No such file or directory
error: linkat (proc_fd, proc_name, AT_FDCWD, out_name, AT_SYMLINK_FOLLOW):
  No such file or directory
error: linkat (proc_fd, proc_name, current_fd, out_name,
AT_SYMLINK_FOLLOW):
  No such file or directory
successes: 1, failures: 5

(Seen on tmpfs and XFS, 4.7.x kernels.)

I double-checked with strace, and the test case does not appear to be
broken.  But the exhibited behavior is truly bizarre, and it means that
it is very difficult to give a name to an O_TMPFILE file.
The test case is broken because it does not account for the fact that an 
O_TMPFILE file can only be linked once in this way.  This is still a bit 
counter-intuitive, but it means that O_TMPFILE works.
Florian, could you elaborate on the "can only be linked once in 
this way"? In my experiments, it's possible to link multiple times 
to the O_TMPFILE file.
It's in the quoted bits above.  After the first success, subsequent
attempts at linking the same file descriptor (with AT_EMPTY_PATH or
the /proc/self/fd kludge) fail.  This is what confused me so much, and
makes the behavior seem extremely erratic.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help