security_bdev_setintegrity(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… security_bdev_setintegrity(9) πŸ’…

okay so hi bestie, welcome to the Kernel API Manual β€” yes the actual manual, and today's main character is security_bdev_setintegrity, a little LSM hook that keeps your block device's integrity tea fresh. pour yourself something iced and let's get into it 🧊✨


🌸 NAME 🌸

security_bdev_setintegrity β€” Set the device's integrity data πŸŽ€

like literally, it's the function that tells the LSMs "hey, here's this block device's verified integrity measurement, write it down."


πŸ¦‹ SYNOPSIS πŸ¦‹

int security_bdev_setintegrity (struct block_device *bdev , enum
       lsm_integrity_type type , const void *value , size_t size );

that's the whole glow-up, no cap πŸ”₯


πŸ’œ ARGUMENTS πŸ’œ

  • bdev β€” a block device. the device in question. the icon, the moment πŸ‘‘
  • type β€” the type of integrity we're talking about, e.g. hash digest, signature, etc. she contains multitudes.
  • value β€” the integrity value itself πŸ’–
  • size β€” the size of the integrity value. gotta know how much of value is actually real.

✨ DESCRIPTION ✨

okay so the whole vibe: you're registering a verified integrity measurement of a bdev with LSMs. that's the job. 🫢

<img>important:</img> LSMs should free the previously saved data if value is NULL. like, null = clear it out, bestie, don't leave stale data lying around πŸ™ˆ

and here's the part where you have to lock in β€” the new hook should be invoked every single time the security information is updated, so that these data stay current. every time. no skipping πŸ’€

for example, in dm-verity, if the mapping table is reloaded and configured to use a different dm-verity target with a new roothash and signing information, the previously stored data in the LSM blob will become obsolete.

so yeah. at that point it is crucial to re-invoke the hook to refresh these data and make sure they're up to date. 🧚

and why is this a whole thing? it comes from the design of device-mapper: a device-mapper device is first created, and then targets are subsequently loaded into it. those targets can be modified multiple times during the device's lifetime. so even though the LSM blob is allocated during the creation of the block device, its actual contents are not initialized at this stage and can change substantially over time. (the original even has a sentence that just trails off into the void: "This includes alterations from data that the LSMs correctly." β€” yes, that's really how it ends, we love a cliffhanger 😭)

⚠️ Failure to address this dynamic aspect could potentially allow for bypassing LSM checks. and we do NOT want that, bestie. that's giving security vulnerability energy. do not.

πŸ’€ RETURN πŸ’€

Returns 0 on success, negative values on failure. that's it, that's the whole report card πŸ™ˆ


🌈 SEE ALSO 🌈

Kernel file ./security/security.c β€” and okay the original goes absolutely feral here with a whole phonebook of related hooks, so here's the entire list, every last one, untouched. she did not come to play πŸ‘‘

lsm_file_alloc(9), lsm_backing_file_alloc(9), lsm_blob_alloc(9),
lsm_cred_alloc(9), lsm_inode_alloc(9), lsm_task_alloc(9),
lsm_ipc_alloc(9), lsm_key_alloc(9), lsm_msg_msg_alloc(9),
lsm_bdev_alloc(9), lsm_bpf_map_alloc(9), lsm_bpf_prog_alloc(9),
lsm_bpf_token_alloc(9), lsm_superblock_alloc(9), lsm_fill_user_ctx(9),
security_binder_set_context_mgr(9), security_binder_transaction(9),
security_binder_transfer_binder(9), security_binder_transfer_file(9),
security_ptrace_access_check(9), security_ptrace_traceme(9),
security_capget(9), security_capset(9), security_capable(9),
security_quotactl(9), security_quota_on(9), security_syslog(9),
security_settime64(9), security_vm_enough_memory_mm(9),
security_bprm_creds_for_exec(9), security_bprm_creds_from_file(9),
security_bprm_check(9), security_bprm_committing_creds(9),
security_bprm_committed_creds(9), security_fs_context_submount(9),
security_fs_context_dup(9), security_fs_context_parse_param(9),
security_sb_alloc(9), security_sb_delete(9), security_sb_free(9),
security_free_mnt_opts(9), security_sb_eat_lsm_opts(9),
security_sb_mnt_opts_compat(9), security_sb_remount(9),
security_sb_kern_mount(9), security_sb_show_options(9),
security_sb_statfs(9), security_sb_mount(9), security_sb_umount(9),
security_sb_pivotroot(9), security_sb_set_mnt_opts(9),
security_sb_clone_mnt_opts(9), security_move_mount(9),
security_path_notify(9), security_inode_alloc(9),
security_inode_free(9), security_dentry_init_security(9),
security_dentry_create_files_as(9), security_inode_init_security(9),
security_inode_init_security_anon(9), security_path_mknod(9),
security_path_post_mknod(9), security_path_mkdir(9),
security_path_rmdir(9), security_path_unlink(9),
security_path_symlink(9), security_path_link(9),
security_path_rename(9), security_path_truncate(9),
security_path_chmod(9), security_path_chown(9), security_path_chroot(9),
security_inode_create(9), security_inode_post_create_tmpfile(9),
security_inode_link(9), security_inode_unlink(9),
security_inode_symlink(9), security_inode_mkdir(9),
security_inode_rmdir(9), security_inode_mknod(9),
security_inode_rename(9), security_inode_readlink(9),
security_inode_follow_link(9), security_inode_permission(9),
security_inode_setattr(9), security_inode_post_setattr(9),
security_inode_getattr(9), security_inode_setxattr(9),
security_inode_set_acl(9), security_inode_post_set_acl(9),
security_inode_get_acl(9), security_inode_remove_acl(9),
security_inode_post_remove_acl(9), security_inode_post_setxattr(9),
security_inode_getxattr(9), security_inode_listxattr(9),
security_inode_removexattr(9), security_inode_post_removexattr(9),
security_inode_file_setattr(9), security_inode_file_getattr(9),
security_inode_need_killpriv(9), security_inode_killpriv(9),
security_inode_getsecurity(9), security_inode_setsecurity(9),
security_inode_listsecurity(9), security_inode_getlsmprop(9),
security_inode_copy_up(9), security_inode_copy_up_xattr(9),
security_inode_setintegrity(9), security_kernfs_init_security(9),
security_file_permission(9), security_file_alloc(9),
security_file_release(9), security_file_free(9),
security_backing_file_alloc(9), security_backing_file_free(9),
security_file_ioctl(9), security_file_ioctl_compat(9),
security_mmap_file(9), security_mmap_backing_file(9),
security_mmap_addr(9), security_file_mprotect(9), security_file_lock(9),
security_file_fcntl(9), security_file_set_fowner(9),
security_file_send_sigiotask(9), security_file_receive(9),
security_file_open(9), security_file_post_open(9),
security_file_truncate(9), security_task_alloc(9),
security_task_free(9), security_cred_alloc_blank(9),
security_cred_free(9), security_prepare_creds(9),
security_transfer_creds(9), security_cred_getsecid(9),
security_cred_getlsmprop(9), security_kernel_act_as(9),
security_kernel_create_files_as(9), security_kernel_module_request(9),
security_kernel_read_file(9), security_kernel_post_read_file(9),
security_kernel_load_data(9), security_kernel_post_load_data(9),
security_task_fix_setuid(9), security_task_fix_setgid(9),
security_task_fix_setgroups(9), security_task_setpgid(9),
security_task_getpgid(9), security_task_getsid(9),
security_current_getlsmprop_subj(9), security_task_getlsmprop_obj(9),
security_task_setnice(9), security_task_setioprio(9),
security_task_getioprio(9), security_task_prlimit(9),
security_task_setrlimit(9), security_task_setscheduler(9),
security_task_getscheduler(9), security_task_movememory(9),
security_task_kill(9), security_task_prctl(9),
security_task_to_inode(9), security_create_user_ns(9),
security_ipc_permission(9), security_ipc_getlsmprop(9),
security_msg_msg_alloc(9), security_msg_msg_free(9),
security_msg_queue_alloc(9), security_msg_queue_free(9),
security_msg_queue_associate(9), security_msg_queue_msgctl(9),
security_msg_queue_msgsnd(9), security_msg_queue_msgrcv(9),
security_shm_alloc(9), security_shm_free(9), security_shm_associate(9),
security_shm_shmctl(9), security_shm_shmat(9), security_sem_alloc(9),
security_sem_free(9), security_sem_associate(9), security_sem_semctl(9),
security_sem_semop(9), security_d_instantiate(9),
security_getselfattr(9), security_setselfattr(9),
security_getprocattr(9), security_setprocattr(9),
security_ismaclabel(9), security_secid_to_secctx(9),
security_lsmprop_to_secctx(9), security_secctx_to_secid(9),
security_release_secctx(9), security_inode_invalidate_secctx(9),
security_inode_notifysecctx(9), security_inode_setsecctx(9),
security_inode_getsecctx(9), security_post_notification(9),
security_watch_key(9), security_netlink_send(9),
security_unix_stream_connect(9), security_unix_may_send(9),
security_socket_create(9), security_socket_post_create(9),
security_socket_socketpair(9), security_socket_bind(9),
security_socket_connect(9), security_socket_listen(9),
security_socket_accept(9), security_socket_sendmsg(9),
security_socket_recvmsg(9), security_socket_getsockname(9),
security_socket_getpeername(9), security_socket_getsockopt(9),
security_socket_setsockopt(9), security_socket_shutdown(9),
security_sock_rcv_skb(9), security_socket_getpeersec_stream(9),
security_socket_getpeersec_dgram(9), lsm_sock_alloc(9),
security_sk_alloc(9), security_sk_free(9), security_sk_clone(9),
security_sk_classify_flow(9), security_req_classify_flow(9),
security_sock_graft(9), security_inet_conn_request(9),
security_inet_csk_clone(9), security_inet_conn_established(9),
security_secmark_relabel_packet(9), security_secmark_refcount_inc(9),
security_secmark_refcount_dec(9), security_tun_dev_alloc_security(9),
security_tun_dev_free_security(9), security_tun_dev_create(9),
security_tun_dev_attach_queue(9), security_tun_dev_attach(9),
security_tun_dev_open(9), security_sctp_assoc_request(9),
security_sctp_bind_connect(9), security_sctp_sk_clone(9),
security_sctp_assoc_established(9), security_mptcp_add_subflow(9),
security_unix_find(9), security_ib_pkey_access(9),
security_ib_endport_manage_subnet(9), security_ib_alloc_security(9),
security_ib_free_security(9), security_xfrm_policy_alloc(9),
security_xfrm_policy_clone(9), security_xfrm_policy_free(9),
security_xfrm_policy_delete(9), security_xfrm_state_alloc(9),
security_xfrm_state_alloc_acquire(9), security_xfrm_state_delete(9),
security_xfrm_state_free(9), security_xfrm_policy_lookup(9),
security_xfrm_state_pol_flow_match(9), security_xfrm_decode_session(9),
security_key_alloc(9), security_key_free(9), security_key_permission(9),
security_key_getsecurity(9), security_key_post_create_or_update(9),
security_audit_rule_init(9), security_audit_rule_known(9),
security_audit_rule_free(9), security_audit_rule_match(9),
security_bpf(9), security_bpf_map(9), security_bpf_prog(9),
security_bpf_map_create(9), security_bpf_prog_load(9),
security_bpf_token_create(9), security_bpf_token_cmd(9),
security_bpf_token_capable(9), security_bpf_map_free(9),
security_bpf_prog_free(9), security_bpf_token_free(9),
security_locked_down(9), security_bdev_alloc(9), security_bdev_free(9),
security_perf_event_open(9), security_perf_event_alloc(9),
security_perf_event_free(9), security_perf_event_read(9),
security_perf_event_write(9), security_uring_override_creds(9),
security_uring_sqpoll(9), security_uring_cmd(9),
security_uring_allowed(9), security_initramfs_populated(9)

that's the whole page, bestie, you ate that πŸ’… and real quick, the cute little sign-off at the bottom of the original says this one lives in ./security and it's dated October 2026 β€” so yeah, future-dated, iconic, she's ahead of her time πŸ¦‹βœ¨πŸ’–

πŸ“¦ where this page comes from