Мой модуль ядра Linux не смог запросить системный брелок - PullRequest
1 голос
/ 16 апреля 2020

Я новичок в разработке модуля ядра. Я хочу, чтобы мой модуль выполнял такую ​​задачу, как проверка подписи , поэтому я добавляю свой собственный путь к самозаверяющему сертификату в CONFIG_SYSTEM_TRUSTED_KEYS и компилирую в ядро. Ключ можно увидеть через cat /proc/keys как (последняя запись):

040268c0 I------     1 perm 1f0b0000     0     0 keyring   .builtin_regdb_keys: 1
152aaaa3 I------     1 perm 1f030000     0     0 keyring   .id_resolver: empty
1eede733 I--Q---     1 perm 1f3f0000     0 65534 keyring   _uid_ses.0: 1
249059d2 I------     1 perm 1f030000     0     0 asymmetri sforshee: 00b28ddf47aef9cea7: X509.rsa []
299b6a42 I--Q---     2 perm 1f3f0000     0 65534 keyring   _uid.0: empty
3bce6f1c I------     1 perm 1f030000     0     0 keyring   .dns_resolver: empty
3d6c305b I------     1 perm 1f0b0000     0     0 keyring   .builtin_trusted_keys: 1
3d9c2543 I------     1 perm 1f030000     0     0 asymmetri <...>: <...>: <...>: X509.rsa 4c9c3ec4 []

Поскольку это работает нормально, я хочу получить этот ключ в коде моего модуля ядра . Я прочитал несколько документов и использовал следующий API для получения ключа:

struct key *request_key(const struct key_type *type,
                        const char *description,
                        const char *callout_string);

Мой код такой:

struct key *key;
key = request_key(&key_type_asymmetric, "<...>: <...>: <...>", NULL);

В <...> указана моя личная информация.

У меня отладка в другом месте, и я считаю, что передал правильную строку description. Но я всегда получаю ENOKEY. Может кто-нибудь сказать мне, если есть какая-либо ошибка? Или есть лучший способ получить ключ? Спасибо.

Кроме того, я пробовал другие ключи в списке, и я могу получить только ключ с описанием _uid_ses.0 и _uid.0.

...