fusefs: handle evil servers that return illegal inode numbers
authorAlan Somers <asomers@FreeBSD.org>
Wed, 4 May 2022 23:36:17 +0000 (17:36 -0600)
committerAlan Somers <asomers@FreeBSD.org>
Thu, 12 May 2022 20:32:26 +0000 (14:32 -0600)
commit0bef4927ea858bb18b6f679bc0a36cff264dc842
treecfec5e4bcaab80a4c7a629d44777d125ea9cea0e
parent8b582b16402102df10a715c626e212bbbc8e9d7c
fusefs: handle evil servers that return illegal inode numbers

* If during FUSE_CREATE, FUSE_MKDIR, etc the server returns the same
  inode number for the new file as for its parent directory, reject it.
  Previously this would triggers a recurse-on-non-recursive lock panic.

* If during FUSE_LINK the server returns a different inode number for
  the new name as for the old one, reject it.  Obviously, that can't be
  a hard link.

* If during FUSE_LOOKUP the server returns the same inode number for the
  new file as for its parent directory, reject it.  Nothing good can
  come of this.

PR: 263662
Reported by: Robert Morris <rtm@lcs.mit.edu>
MFC after: 2 weeks
Reviewed by: pfg
Differential Revision: https://reviews.freebsd.org/D35128
sys/fs/fuse/fuse_ipc.h
sys/fs/fuse/fuse_node.c
sys/fs/fuse/fuse_vnops.c
tests/sys/fs/fusefs/create.cc
tests/sys/fs/fusefs/link.cc
tests/sys/fs/fusefs/lookup.cc
tests/sys/fs/fusefs/mkdir.cc
tests/sys/fs/fusefs/mknod.cc
tests/sys/fs/fusefs/symlink.cc