Thread (10 messages) flat view 10 messages, 4 authors, 2018-11-24

Re: [PATCH v4 2/4] namei: O_BENEATH-style path resolution flags

From: Aleksa Sarai <hidden>
Date: 2018-11-23 16:52:12
Also in: linux-arch, linux-fsdevel, lkml

On 2018-11-24, Aleksa Sarai [off-list ref] wrote:
quoted
quoted
quoted
On Tue, 2018-11-13 at 01:26 +1100, Aleksa Sarai wrote:
* O_BENEATH: Disallow "escapes" from the starting point of the
 filesystem tree during resolution (you must stay "beneath" the
 starting point at all times). Currently this is done by disallowing
 ".." and absolute paths (either in the given path or found during
 symlink resolution) entirely, as well as all "magic link" jumping.
With open_tree(2) and OPEN_TREE_CLONE, will O_BENEATH still be
necessary?
This discussion reminds me of something I’m uncomfortable with in the
current patches: currently, most of the O_ flags determine some
property of the returned opened file.  The new O_ flags you're adding
don't -- instead, they affect the lookup of the file.  So O_BENEATH
doesn't return a descriptor that can only be used to loop up files
beneath it -- it just controls whether open(2) succeeds or fails.  It
might be nice for the naming of the flags to reflect this.
I agree that there is something quite weird about having path resolution
flags in an *open* syscall. The main reason why it's linked to open is
because that's the only way to get O_PATH descriptors (which is what you
would use for most of the extended operations we need -- as well as
reading+writing to files which is what most users would do with this).

And I think O_PATH is another example of an open flag that is just odd
in how it changes the semantics of using open(2).

One of the ideas I pitched in an earlier mail was a hypothetical
resolveat(2) -- which would just be a new way of getting an O_PATH
descriptor. This way, we wouldn't be using up more O_* flag bits with
this feature and we'd be able to play with more radical semantic changes
in the future. I can outline these here if you like, but it's a bit of a
long discussion and I'd prefer not to derail things too much if
resolveat(2) is definitely out of the question.
Sorry, one thing I forgot to mention about returning descriptors that
can only look up files beneath it -- while I think this would be very
useful, I'd be worried about jumping into chroot(2) territory where now
you are giving userspace the opportunity to try to create nested
"beneathfds" and so on. I do think it would be quite useful and
interesting though, but I'm not entirely sure how doable it would be
with the current namei infrastructure.

-- 
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help