#linux #kernel
Вопрос:
Я пытаюсь написать простой модуль lsm, который также ничего не делает. но у меня есть несколько проблем.
static int rdwn_task_kill(
struct task_struct* p,
struct siginfo *info,
int sig,
u32 secid
) {
return 0;
}
static struct security_hook_list rdwn_hooks[] = {
LSM_HOOK_INIT(task_kill, rdwn_task_kill)
};
static __init rdwn_init(void) {
security_add_hooks(rdwn_hooks, ARRAY_SIZE(rdwn_hooks), "rdwn");
printk(KERN_INFO "RDWN: Initializing.n");
return 0;
}
// How to load module??
как вы знаете, написание и загрузка lsm были более простыми в предыдущих версиях ядра.
но теперь я остро запутался в этом. раньше были такие функции, как security_initcall
. но как насчет сейчас??? как я могу загрузить lsm в ядре 5 и более поздних версиях?? Я посмотрел на другие коды lsm, такие как selinux и apparmor, и в них использовался макрос DEFINE_LSM
, который определяет структуру и ничего больше (на самом деле я больше ничего не вижу). Этого достаточно? и является ли это правильным способом загрузки lsm? что произойдет, если я использую module_init
экземпляр всех из них??? наконец, каков истинный способ регистрации и загрузки lsm в ядро?
другой вопрос: когда я компилирую приведенный выше код (когда я его завершаю), я получаю что-то вроде этих ошибок:
error modpost: security_add_hooks undefined!
error modpost: security_hook_heads undefined!
что это? и почему я получаю эти ошибки?? интересно отметить, что когда я реализовал свои собственные struct_add_hooks и security_hook_heads (те же, но с изменением их имен), эта ошибка исчезла. почему?
кто-нибудь может помочь мне реализовать хороший lsm? 🙂