check_acl(9)
π
check_acl(9) β the check_acl girlies' guide
okay so this is page check_acl(9) from the Kernel API Manual, and bestie, it's literally about doing ACL permission checking π no cap, it's short but it matters.
β¨ SYNOPSIS β¨
int check_acl (struct mnt_idmap *idmap , struct inode *inode , int mask
);
yes she's a int, yes she takes three args, and yes you're gonna read all of them π
πΈ ARGUMENTS πΈ
idmapβ the idmap of the mount that the inode was found from. like, which mount's identity-mapping situation are we in, yk? π¦inodeβ the actual inode you wanna check permissions on. the main character fr. πmaskβ the right you're checking for (MAY_READ,MAY_WRITE,MAY_EXEC...). pick your fighter β
π DESCRIPTION π
so this function performs the ACL permission checking. that's the whole vibe. π«Ά
and here's the important part β because this function retrieves POSIX acls, it needs to know whether it's being called from a blocking or non-blocking context. so yeah, it cares about the MAY_NOT_BLOCK bit. like genuinely cares. respect her for that lowkey π
so if the inode has been found through an idmapped mount, the idmap of the vfsmount must be passed through idmap. the function will then take care to map the inode according to idmap before checking permissions. slay, she handles it herself β¨
but listen β on non-idmapped mounts, or if permission checking is to be performed on the raw inode, just simply pass nop_mnt_idmap. that's it. that's the move. don't overthink it π§
π SEE ALSO π
Kernel file ./fs/namei.c, and literally the entire namei extended family β she has a LOT of cousins, iykyk π:
acl_permission_check(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)
like I said. huge family. ate. π₯
that's the whole page babes, go check some acls π
sign-off szn π β this one's from the ./fs corner of the world, dated October 2026, and it's still check_acl(9) bestie. periodt. π
β¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms