написание простого lsm в ядре 5.x

#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? 🙂