VFS: rename lookup_one_len family to lookup_noperm and remove permission check
authorNeilBrown <neil@brown.name>
Wed, 19 Mar 2025 03:01:35 +0000 (14:01 +1100)
committerChristian Brauner <brauner@kernel.org>
Tue, 8 Apr 2025 09:24:36 +0000 (11:24 +0200)
commitfa6fe07d1536361a227d655e69ca270faf28fdbe
tree55e12a65d8b5f39c930aa14ae1342e6cacdfa4e8
parent2011067c6477b55ef510e4ef830bca2869cd8136
VFS: rename lookup_one_len family to lookup_noperm and remove permission check

The lookup_one_len family of functions is (now) only used internally by
a filesystem on itself either
- in a context where permission checking is irrelevant such as by a
  virtual filesystem populating itself, or xfs accessing its ORPHANAGE
  or dquota accessing the quota file; or
- in a context where a permission check (MAY_EXEC on the parent) has just
  been performed such as a network filesystem finding in "silly-rename"
  file in the same directory.  This is also the context after the
  _parentat() functions where currently lookup_one_qstr_excl() is used.

So the permission check is pointless.

The name "one_len" is unhelpful in understanding the purpose of these
functions and should be changed.  Most of the callers pass the len as
"strlen()" so using a qstr and QSTR() can simplify the code.

This patch renames these functions (include lookup_positive_unlocked()
which is part of the family despite the name) to have a name based on
"lookup_noperm".  They are changed to receive a 'struct qstr' instead
of separate name and len.  In a few cases the use of QSTR() results in a
new call to strlen().

try_lookup_noperm() takes a pointer to a qstr instead of the whole
qstr.  This is consistent with d_hash_and_lookup() (which is nearly
identical) and useful for lookup_noperm_unlocked().

The new lookup_noperm_common() doesn't take a qstr yet.  That will be
tidied up in a subsequent patch.

Signed-off-by: NeilBrown <neil@brown.name>
Link: https://lore.kernel.org/r/20250319031545.2999807-5-neil@brown.name
Signed-off-by: Christian Brauner <brauner@kernel.org>
25 files changed:
Documentation/filesystems/porting.rst
arch/s390/hypfs/inode.c
drivers/android/binderfs.c
drivers/infiniband/hw/qib/qib_fs.c
fs/afs/dir.c
fs/afs/dir_silly.c
fs/autofs/dev-ioctl.c
fs/binfmt_misc.c
fs/debugfs/inode.c
fs/ecryptfs/inode.c
fs/kernfs/mount.c
fs/namei.c
fs/nfs/unlink.c
fs/overlayfs/export.c
fs/overlayfs/namei.c
fs/quota/dquot.c
fs/smb/client/cached_dir.c
fs/smb/client/cifsfs.c
fs/tracefs/inode.c
fs/xfs/scrub/orphanage.c
include/linux/namei.h
ipc/mqueue.c
kernel/bpf/inode.c
security/apparmor/apparmorfs.c
security/inode.c