Это может быть немного поздно, так как я вижу ваш вопрос некоторое время назад. То, что я нашел хорошим решением - это написать модуль, который вы компилируете в ядро, и просто экспортирует пару функций, с которыми вы будете играть.
Например
//REGISTER FILE_PERMISSION
static void k_register_file_permission(int (*my_file_permission) (struct file *file, int mask)) {
my_file_permission_func = my_file_permission;
}
EXPORT_SYMBOL(k_register_file_permission);
Тогда вы можете просто вызвать k_register_file_permission из вашего модуля ядра, что удобно во время процесса разработки.
Вам также понадобится такая функция, как
int k_file_permission (struct file *file, int mask) {
if(my_file_permission_func == NULL)
{
//do nothing
}
else
{
return my_file_permission_func(file, mask);
}
return 0;
}
Что бы вы зарегистрировались в LSM во время загрузки.