All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] virtiofsd: Deal with empty filenames
@ 2021-03-12 14:10 ` Greg Kurz
  0 siblings, 0 replies; 19+ messages in thread
From: Greg Kurz @ 2021-03-12 14:10 UTC (permalink / raw)
  To: qemu-devel
  Cc: virtio-fs, Miklos Szeredi, Dr. David Alan Gilbert,
	Stefan Hajnoczi, Greg Kurz

There's no such thing as an empty file name in POSIX-compliant file systems.
The current code base doesn't ensure the client doesn't send requests with
such empty names. I've audited the code and only found one place where
the behavior is somewhat altered in lookup_name() :

    res = do_statx(lo, dir->fd, name, &attr,
                   AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW, &mnt_id);

lookup_name() is used by lo_rmdir(), lo_rename() and lo_unlink() which
all share the same behavior of doing some action on a file or directory
under a given parent directory. But if an empty name reaches the code
above, do_statx() returns the attributes of the parent directory itself
and lookup_name() might return the inode of the parent directory. This
could potentially cause security concerns in the callers.

Fortunately, it doesn't as of today. If the parent directory is the root
inode, lookup_name() returns NULL because lo_find() fails to find an
inode with a matching .st_dev. Otherwise, lookup_name() does return the
parent inode but the empty name then gets passed to either unlinkat(),
renameat() or renameat2(), all of which fail with ENOENT in this case.

Drop AT_EMPTY_PATH from the above code anyway to make it clear empty
names aren't expected by the existing callers. If the need for it
arises in the future, it can be added back but stay safe for now.

The FUSE protocol doesn't have a notion of AT_EMPTY_PATH actually. The
server should hence never see empty names in client requests. Detect
this early and systematically fail the request with ENOENT in this
case.

No regression is observed with the POSIX-oriented pjdfstest file system
test suite (https://github.com/pjd/pjdfstest).

Greg Kurz (3):
  virtiofsd: Don't allow empty paths in lookup_name()
  virtiofsd: Convert some functions to return bool
  virtiofsd: Don't allow empty filenames

 tools/virtiofsd/passthrough_ll.c | 44 ++++++++++++++++++++++++++++----
 1 file changed, 39 insertions(+), 5 deletions(-)

-- 
2.26.2




^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2021-03-15 17:55 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-12 14:10 [PATCH 0/3] virtiofsd: Deal with empty filenames Greg Kurz
2021-03-12 14:10 ` [Virtio-fs] " Greg Kurz
2021-03-12 14:10 ` [PATCH 1/3] virtiofsd: Don't allow empty paths in lookup_name() Greg Kurz
2021-03-12 14:10   ` [Virtio-fs] " Greg Kurz
2021-03-12 15:13   ` Connor Kuehl
2021-03-12 15:49     ` Greg Kurz
2021-03-14 23:38   ` Vivek Goyal
2021-03-12 14:10 ` [PATCH 2/3] virtiofsd: Convert some functions to return bool Greg Kurz
2021-03-12 14:10   ` [Virtio-fs] " Greg Kurz
2021-03-12 15:13   ` Connor Kuehl
2021-03-14 23:36   ` Vivek Goyal
2021-03-12 14:10 ` [PATCH 3/3] virtiofsd: Don't allow empty filenames Greg Kurz
2021-03-12 14:10   ` [Virtio-fs] " Greg Kurz
2021-03-12 15:13   ` Connor Kuehl
2021-03-14 23:36   ` Vivek Goyal
2021-03-15 10:06     ` Greg Kurz
2021-03-15 15:18       ` Dr. David Alan Gilbert
2021-03-15 17:37         ` Greg Kurz
2021-03-15 17:55       ` Vivek Goyal

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.