Linux-Fsdevel Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Matthew Wilcox <willy@infradead.org>
To: Al Viro <viro@zeniv.linux.org.uk>
Cc: Dave Chinner <david@fromorbit.com>,
Christian Schoenebeck <qemu_oss@crudebyte.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Greg Kurz <groug@kaod.org>,
linux-fsdevel@vger.kernel.org, stefanha@redhat.com,
mszeredi@redhat.com, vgoyal@redhat.com, gscrivan@redhat.com,
dwalsh@redhat.com, chirantan@chromium.org
Subject: Re: xattr names for unprivileged stacking?
Date: Sat, 29 Aug 2020 21:12:45 +0100 [thread overview]
Message-ID: <20200829201245.GU14765@casper.infradead.org> (raw)
In-Reply-To: <20200829194042.GT1236603@ZenIV.linux.org.uk>
On Sat, Aug 29, 2020 at 08:40:42PM +0100, Al Viro wrote:
> On Sat, Aug 29, 2020 at 08:17:51PM +0100, Matthew Wilcox wrote:
>
> > I probably have the wrong nomenclature for what I'm proposing.
> >
> > So here's a concrete API. What questions need to be answered?
> >
> > fd = open("real", O_RDWR);
> >
> > // fetch stream names
> > sfd = open_stream(fd, NULL);
> > read(sfd, names, length);
>
> 1) what does fstat() on sfd return?
My strawman answers:
- st_dev, st_ino, st_uid, st_gid, st_rdev, st_blksize are those of the
containing file
- st_mode: S_IFREG | parent & 0777
- st_nlink: 1
- st_size, st_blocks st_atime, st_mtime, st_ctime: as appropriate
> 2) what does keeping it open do to underlying file?
I don't have a solid answer here. Maybe it keeps a reference count on
the underlying inode? Obviously we need to prevent the superblock from
disappearing from under it. Maybe it needs to keep a refcount on the
struct file it was spawned from. I haven't thought this through yet.
> 3) what happens to it if that underlying file is unlinked?
Unlinking a file necessarily unlinks all the streams. So the file
remains in existance until all fds on it are closed, including all
the streams.
> 4) what does it do to underlying filesystem? Can it be unmounted?
I think I covered that in the earlier answers.
> > // create a new anonymous stream
> > sfd = open_stream(fd, "");
> > write(sfd, buffer, buflen);
> > // name it
> > linkat(sfd, NULL, fd, "newstream", AT_EMPTY_PATH);
>
> Oh, lovely - so linkat() *CAN* get that for dirfd and must somehow tell
> it from the normal case. With the semantics entirely unrelated to the normal
> one.
I'm open to just using a different syscall. link_stream(sfd, "newstream");
And, as you point out below, we need unlink_stream(fd, "stream");
> And on top of everything else, we have
> 5) what are the permissions involved? When are they determined, BTW?
If you can open a file, you can open its streams. So an O_PATH file
descriptor can't be used to open streams.
> > close(sfd);
> >
> > - Stream names are NUL terminated and may contain any other character.
> > If you want to put a '/' in a stream name, that's fine, but there's
> > no hierarchy. Ditto "//../././../../..//./." It's just a really
> > oddly named stream.
>
> Er... Whatever for?
Interoperability. If some other system creates a stream with a '/' in
it, I don't want the filesystem to have to convert. Although, at least
Windows doesn't permit '/' in stream names [1] [2]. Of course, individual
filesystems could reject characters in names that they don't like.
[1] https://docs.microsoft.com/en-us/windows/win32/fileio/file-streams
[2] https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
> > - linkat() will fail if 'fd' does not match where 'sfd' was created.
>
> 6) "match" in the above being what, exactly?
Referring to a different inode than the one it was created in. Although
if we just go with the link_stream() proposal above, then this point is
moot.
next prev parent reply other threads:[~2020-08-29 20:12 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-28 10:55 Dr. David Alan Gilbert
2020-07-28 13:08 ` Greg Kurz
2020-07-28 13:55 ` Christian Schoenebeck
2020-08-04 11:28 ` Dr. David Alan Gilbert
2020-08-04 13:51 ` Christian Schoenebeck
2020-08-12 11:18 ` Dr. David Alan Gilbert
2020-08-12 13:34 ` Christian Schoenebeck
2020-08-12 14:33 ` Dr. David Alan Gilbert
2020-08-13 9:01 ` Christian Schoenebeck
2020-08-16 22:56 ` Dave Chinner
2020-08-16 23:09 ` Matthew Wilcox
2020-08-17 0:29 ` Dave Chinner
2020-08-17 10:37 ` file forks vs. xattr (was: xattr names for unprivileged stacking?) Christian Schoenebeck
2020-08-23 23:40 ` Dave Chinner
2020-08-24 15:30 ` Christian Schoenebeck
2020-08-24 20:01 ` Miklos Szeredi
2020-08-24 21:26 ` Frank van der Linden
2020-08-24 22:29 ` Theodore Y. Ts'o
2020-08-25 15:12 ` Christian Schoenebeck
2020-08-25 15:32 ` Miklos Szeredi
2020-08-27 12:02 ` Christian Schoenebeck
2020-08-27 12:25 ` Matthew Wilcox
2020-08-27 13:48 ` Christian Schoenebeck
2020-08-27 14:01 ` Matthew Wilcox
2020-08-27 14:23 ` Christian Schoenebeck
2020-08-27 14:25 ` Matthew Wilcox
2020-08-27 14:44 ` Al Viro
2020-08-27 16:29 ` Dr. David Alan Gilbert
2020-08-27 16:35 ` Matthew Wilcox
2020-08-28 9:11 ` Christian Schoenebeck
2020-08-28 14:46 ` Theodore Y. Ts'o
2020-08-27 15:22 ` xattr names for unprivileged stacking? Matthew Wilcox
2020-08-27 22:24 ` Dave Chinner
2020-08-29 16:07 ` Matthew Wilcox
2020-08-29 16:13 ` Al Viro
2020-08-29 17:51 ` Miklos Szeredi
2020-08-29 18:04 ` Al Viro
2020-08-29 18:22 ` Christian Schoenebeck
2020-08-29 19:13 ` Miklos Szeredi
2020-08-29 19:25 ` Al Viro
2020-08-30 19:05 ` Miklos Szeredi
2020-08-30 19:10 ` Matthew Wilcox
2020-08-31 7:34 ` Miklos Szeredi
2020-08-31 11:37 ` Matthew Wilcox
2020-08-31 11:51 ` Miklos Szeredi
2020-08-31 13:23 ` Matthew Wilcox
2020-08-31 14:21 ` Miklos Szeredi
2020-08-31 14:25 ` Theodore Y. Ts'o
2020-08-31 14:45 ` Matthew Wilcox
2020-08-31 14:49 ` Miklos Szeredi
2020-09-01 3:34 ` Dave Chinner
2020-09-01 14:52 ` Theodore Y. Ts'o
2020-09-01 15:14 ` Theodore Y. Ts'o
2020-09-02 5:19 ` Dave Chinner
2020-08-31 18:02 ` Andreas Dilger
2020-09-01 3:48 ` Dave Chinner
2020-08-29 19:17 ` Matthew Wilcox
2020-08-29 19:40 ` Al Viro
2020-08-29 20:12 ` Matthew Wilcox [this message]
2020-08-31 14:23 ` Theodore Y. Ts'o
2020-08-31 14:40 ` Matthew Wilcox
2020-08-31 16:11 ` Christian Schoenebeck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200829201245.GU14765@casper.infradead.org \
--to=willy@infradead.org \
--cc=chirantan@chromium.org \
--cc=david@fromorbit.com \
--cc=dgilbert@redhat.com \
--cc=dwalsh@redhat.com \
--cc=groug@kaod.org \
--cc=gscrivan@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=mszeredi@redhat.com \
--cc=qemu_oss@crudebyte.com \
--cc=stefanha@redhat.com \
--cc=vgoyal@redhat.com \
--cc=viro@zeniv.linux.org.uk \
--subject='Re: xattr names for unprivileged stacking?' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).