Код: Выделить всё
#include
#include
#include
#include
static int hello_lsm_inode_unlink(struct inode *dir, struct dentry *dentry) {
pr_info("LSM Hello World: Preventing unlink for file: %s\n", dentry->d_name.name);
return -EPERM; // Prevent the file from being deleted
}
static struct security_hook_list hello_hooks[] = {
LSM_HOOK_INIT(inode_unlink, hello_lsm_inode_unlink),
};
static int __init hello_lsm_init(void) {
pr_info("LSM Hello World: Initializing\n");
security_add_hooks(hello_hooks, ARRAY_SIZE(hello_hooks), "lsm_hello");
return 0;
}
static void __exit hello_lsm_exit(void) {
pr_info("LSM Hello World: Exiting\n");
}
module_init(hello_lsm_init);
module_exit(hello_lsm_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("You");
MODULE_DESCRIPTION("Minimal LSM with inode_unlink hook");
< /code>
и Makefile: < /p>
EXTRA_CFLAGS += -DCONFIG_SECURITY_WRITABLE_HOOKS
obj-m := lsm_hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
< /code>
Но когда я скомпилируюсь, я получаю эти ошибки, а файл .ko не генерируется: < /p>
make[1]: Entering directory '/usr/src/linux-headers-6.1.0-31-amd64'
CC [M] /root/lsm_hello/lsm_hello.o
MODPOST /root/lsm_hello/Module.symvers
ERROR: modpost: "security_add_hooks" [/root/lsm_hello/lsm_hello.ko] undefined!
ERROR: modpost: "security_hook_heads" [/root/lsm_hello/lsm_hello.ko] undefined!
make[2]: *** [/usr/src/linux-headers-6.1.0-31-common/scripts/Makefile.modpost:127: /root/lsm_hello/Module.symvers] Error 1
make[1]: *** [/usr/src/linux-headers-6.1.0-31-common/Makefile:1986: modpost] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.1.0-31-amd64'
make: *** [Makefile:6: all] Error 2
< /code>
С некоторой пробной и ошибкой я обнаружил, что проблема возникает из этой строки: < /p>
security_add_hooks(hello_hooks, ARRAY_SIZE(hello_hooks), "lsm_hello");
< /code>
Если я прокомментирую это, то он собирается хорошо, и я могу проверить, что он работает: < /p>
root@debian:~/lsm_hello# insmod lsm_hello.ko
root@debian:~/lsm_hello# rmmod lsm_hello
root@debian:~/lsm_hello# journalctl --since "1 hour ago" | grep kernel.
Mar 16 15:21:33 debian kernel: LSM Hello World: Initializing
Mar 16 15:21:46 debian kernel: LSM Hello World: Exiting
Подробнее здесь: https://stackoverflow.com/questions/795 ... kernel-6-x