acl_permission_check(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

acl_permission_check(9) βœ¨πŸ’…

okay so bestie, this is a page from the Kernel API Manual and it's literally all about acl_permission_check β€” the function that does the basic UNIX permission checking. no cap, it's lowkey iconic. let's get into it 🫢


✨ SYNOPSIS ✨

int acl_permission_check (struct mnt_idmap *idmap , struct inode *inode
, int mask );

πŸŽ€ ARGUMENTS πŸŽ€

  • idmap β€” the idmap of the mount that the inode was found from. it's giving "which mount are we on" energy πŸ’–
  • inode β€” the inode you wanna check permissions on. main character inode fr fr 🌸
  • mask β€” the right to check for (MAY_READ, MAY_WRITE, MAY_EXEC ...). like, what are we even trying to do here? πŸ‘‘

πŸ’… DESCRIPTION πŸ’…

so this function performs the basic UNIX permission checking. periodt. but here's the tea: since this function may retrieve POSIX acls, it needs to know whether it's called from a blocking or non-blocking context β€” and thus it literally cares about the MAY_NOT_BLOCK bit. don't ask it to multitask without telling it, iykyk 😭

if the inode has been found through an idmapped mount, the idmap of the vfsmount must be passed through idmap. this function will then take care to map the inode according to idmap before checking permissions. slay. on non-idmapped mounts, or if permission checking is to be performed on the raw inode, simply pass nop_mnt_idmap. easy peasy πŸ“

bestie warning: if you're on an idmapped mount and you forget to pass the right idmap, you're gonna have a bad time. not me making that mistake πŸ’€

🌈 SEE ALSO 🌈

okay this list is LONG but we don't skip details in this house. all of these live in the kernel file ./fs/namei.c β€” go check them out:

check_acl(9), generic_permission(9), do_inode_permission(9), sb_permission(9), inode_permission(9), path_get(9), path_put(9), path_connected(9), try_to_unlazy(9), try_to_unlazy_next(9), complete_walk(9), may_follow_link(9), safe_hardlink_source(9), may_linkat(9), may_create_in_sticky(9), lookup_fast(9), start_dirop(9), end_dirop(9), kern_path_parent(9), vfs_path_parent_lookup(9), vfs_path_lookup(9), try_lookup_noperm(9), lookup_noperm(9), lookup_one(9), lookup_one_unlocked(9), lookup_one_positive_killable(9), lookup_one_positive_unlocked(9), lookup_noperm_unlocked(9), start_creating(9), start_removing(9), start_creating_killable(9), start_removing_killable(9), start_creating_noperm(9), start_removing_noperm(9), start_creating_dentry(9), start_removing_dentry(9), __start_renaming(9), start_renaming(9), start_renaming_dentry(9), start_renaming_two_dentries(9), vfs_prepare_mode(9), vfs_create(9), atomic_open(9), vfs_lookup_open(9), vfs_tmpfile(9), kernel_tmpfile_open(9), end_creating_path(9), dentry_create(9), vfs_mknod(9), vfs_mkdir(9), vfs_rmdir(9), vfs_unlink(9), vfs_symlink(9), vfs_link(9), vfs_rename(9), vfs_readlink(9), vfs_get_link(9), page_get_link(9), page_put_link(9)


catch u later bestie πŸ’– this page is from ./fs, October 2026 β€” stay slay and keep those permissions checked βœ¨πŸ¦‹

πŸ“¦ where this page comes from