smack_inode_unlink(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

so bestie, welcome to the smack_inode_unlink(9) page β€” yes that's the kernel API manual, section 9, and yes we're doing this. this is the Smack check that runs when someone tries to delete an inode. it's giving security-module gatekeeper energy and honestly? iconic. let's get into it πŸ¦‹


✨ NAME ✨

smack_inode_unlink β€” the Smack check on inode deletion πŸ’€

like, the vibe check that happens before a file gets unlinked. no cap.


🌸 SYNOPSIS 🌸

int smack_inode_unlink (struct inode *dir , struct dentry *dentry );

look at that signature. two pointers, one int. short, sweet, and it will absolutely tell you no if it's not feeling it 🫢


πŸŽ€ ARGUMENTS πŸŽ€

  • dir β€” the containing directory object. the folder that's holding the thing being unlinked. think of it as the parent that has to also be okay with this whole situation πŸ‘‘
  • dentry β€” the file to unlink. the actual victim of this operation. pour one out 😭

🧚 DESCRIPTION 🧚

okay so here's the whole deal, plain and simple:

it returns 0 if the current process can write the containing directory and the object β€” and an error code otherwise ✨

that's it. that's the function. both checks, or no deal. the current task has to have write access to the directory and to the thing inside it, otherwise you get an error code back instead of that sweet sweet 0. periodt. πŸ”₯

lowkey important: it's and, not or. bestie cannot just have one of the two. the LSM does not do partial credit πŸ’…

🌈 SEE ALSO 🌈

girl. sit down. hydrate. this list is long and we are not skipping a single one of them, because every single reference here is part of the Smack family and we love them all equally πŸ“

kernel file ./security/smack/smack_lsm.c, plus: smk_fetch(9), init_inode_smack(9), init_task_smack(9), smk_copy_rules(9), smk_copy_relabel(9), smk_ptrace_mode(9), smk_ptrace_rule_check(9), smack_ptrace_access_check(9), smack_ptrace_traceme(9), smack_syslog(9), smack_sb_alloc_security(9), smack_fs_context_submount(9), smack_fs_context_dup(9), smack_fs_context_parse_param(9), smack_set_mnt_opts(9), smack_sb_statfs(9), smack_bprm_creds_for_exec(9), smack_inode_alloc_security(9), smk_rule_transmutes(9), smack_inode_init_security(9), smack_inode_link(9), smack_inode_rmdir(9), smack_inode_rename(9), smack_inode_permission(9), smack_inode_setattr(9), smack_inode_getattr(9), smack_inode_xattr_skipcap(9), smack_inode_setxattr(9), smack_inode_post_setxattr(9), smack_inode_getxattr(9), smack_inode_removexattr(9), smack_inode_set_acl(9), smack_inode_get_acl(9), smack_inode_remove_acl(9), smack_inode_getsecurity(9), smack_inode_listsecurity(9), smack_inode_getlsmprop(9), smack_file_alloc_security(9), smack_file_ioctl(9), smack_file_lock(9), smack_file_fcntl(9), smack_mmap_file(9), smack_file_set_fowner(9), smack_file_send_sigiotask(9), smack_file_receive(9), smack_file_open(9), smack_cred_alloc_blank(9), smack_cred_free(9), smack_cred_prepare(9), smack_cred_transfer(9), smack_cred_getsecid(9), smack_cred_getlsmprop(9), smack_kernel_act_as(9), smack_kernel_create_files_as(9), smk_curacc_on_task(9), smack_task_setpgid(9), smack_task_getpgid(9), smack_task_getsid(9), smack_current_getlsmprop_subj(9), smack_task_getlsmprop_obj(9), smack_task_setnice(9), smack_task_setioprio(9), smack_task_getioprio(9), smack_task_setscheduler(9), smack_task_getscheduler(9), smack_task_movememory(9), smack_task_kill(9), smack_task_to_inode(9), smack_sk_alloc_security(9), smack_sk_free_security(9), smack_sk_clone_security(9), smack_ipv4host_label(9), smack_ipv6host_label(9), smack_netlbl_add(9), smack_netlbl_delete(9), smk_ipv4_check(9), smk_ipv6_check(9), smk_ipv6_port_label(9), smk_ipv6_port_check(9), smack_inode_setsecurity(9), smack_socket_post_create(9), smack_socket_socketpair(9), smack_socket_bind(9), smack_socket_connect(9), smack_flags_to_may(9), smack_msg_msg_alloc_security(9), smack_of_ipc(9), smack_ipc_alloc_security(9), smk_curacc_shm(9), smack_shm_associate(9), smack_shm_shmctl(9), smack_shm_shmat(9), smk_curacc_sem(9), smack_sem_associate(9), smack_sem_semctl(9), smack_sem_semop(9), smk_tskacc_msq(9), smk_curacc_msq(9), smack_msg_queue_associate(9), smack_msg_queue_msgctl(9), smack_msg_queue_msgsnd(9), smack_msg_queue_msgrcv(9), smack_ipc_permission(9), smack_ipc_getlsmprop(9), smack_d_instantiate(9), smack_getselfattr(9), smack_getprocattr(9), do_setattr(9), smack_setselfattr(9), smack_setprocattr(9), smack_unix_stream_connect(9), smack_unix_may_send(9), smack_socket_sendmsg(9), smack_from_secattr(9), smack_from_skb(9), smack_from_netlbl(9), smack_socket_sock_rcv_skb(9), smack_socket_getpeersec_stream(9), smack_socket_getpeersec_dgram(9), smack_inet_conn_request(9), smack_inet_csk_clone(9), smack_key_alloc(9), smack_key_permission(9), smack_watch_key(9), smack_post_notification(9), smack_audit_rule_init(9), smack_audit_rule_known(9), smack_audit_rule_match(9), smack_ismaclabel(9), smack_to_secctx(9), smack_secid_to_secctx(9), smack_lsmprop_to_secctx(9), smack_secctx_to_secid(9), smack_uring_override_creds(9), smack_uring_sqpoll(9), smack_uring_cmd(9), smack_init(9) πŸ’–

like I said. everyone's invited to the party πŸŽ‰


and that's the whole page bestie!! this one comes to you straight from ./security/smack, dated October 2026 β€” go forth and unlink responsibly, and remember: both the directory and the object. always both. mwah πŸ’œπŸ§š

πŸ“¦ where this page comes from