Как зарегистрировать Linux Security Module в ядре 2.6? - PullRequest
1 голос
/ 13 ноября 2010

Я хочу использовать среду LSM с ядром Ubuntu 2.6.36.

Когда я скомпилировал модуль ядра, он написал:

ВНИМАНИЕ: "register_security" не определено!

После многих поисков я обнаружил, что причина в том, что символ register_security() больше не экспортируется в ядре 2.6.

Поэтому я добавил EXPORT_SYMBOL(register_security) в файл ../security/security.c и перекомпилировал ядро.

После загрузки с новым ядром я добавил extern int register_security(struct security_operations *ops) в файл модуля ядра и снова скомпилировал модуль. Тем не менее, ПРЕДУПРЕЖДЕНИЕ информация все еще существовала. Если я продолжу insmode модуль, dmesg сказал мне, что

Неизвестный символ register_security

Что мне делать? Как я могу зарегистрировать LSM moudle?

Заранее большое спасибо!

С уважением!

F. Чжан

Ответы [ 3 ]

0 голосов
/ 04 февраля 2012

В современных ядрах символ register_security не экспортируется. Это означает, что вы не можете зарегистрировать модуль LSM как модуль. Но если вы действительно хотите это сделать, вы можете сделать это :) Посмотрите на экспортированные символы LSM, например security_sb_copy_data. Они простые обертки над security_ops->some_lsm_method. Таким образом, вы можете использовать их код для определения security_ops значения указателя. Хотя нужен дизассемблер.

0 голосов
/ 20 июля 2012
Unknown symbol register_security

Произошло на линии, что вы отменили регистрацию вашего LSM. Поэтому добавьте unregister_security () в security.c и экспортируйте его:

 /**
 *  unregister_security - allows security modules to be moved
 * @ops : a pointer to the struct security_options that had been registered before.
 */
 int unregister_security(struct security_operations *ops)
{
        if (ops != security_ops) 
      {
                printk (KERN_INFO "%s: trying to unregister "
                        "a security_opts structure that is not "
                         "registered, failing.\n", __FUNCTION__);
                return -EINVAL;
         }
     security_ops = &dummy_security_ops;
      return 0;
}
 EXPORT_SYMBOL(unregister_security);

и перекомпилировал ядро.

0 голосов
/ 15 ноября 2010
  1. Убедитесь, что только что загруженное ядро ​​скомпилировано вами.
  2. Проверьте лицензию вашего модуля (Ref: http://lists.jammed.com/linux-security-module/2004/08/0053.html)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...