Различные способы входа в режим ядра из пользовательского режима? Является ли NETLINK Socket одним из них? Как?

МОЖЕТ ЛИ Сокет NETLINK использоваться для входа в режим ядра из пользовательского режима. Как мы можем реализовать функциональность системного вызова с помощью сокета NETLINK, когда оба перехода из пользовательского режима в режим ядра? ИМХО, если это вообще возможно возможно?. RGds, Софти


person Raulp    schedule 18.05.2012    source источник


Ответы (1)


Пользовательское приложение может войти в ядро ​​[Unix] двумя способами (что означает выполнение кода ядра непосредственно от имени процесса пользовательского режима):

  • Сделать системный вызов, т. е. явно запросить службу у ядра.
  • trap into the kernel because of either:
    • an error (segmentation violation, invalid instruction, etc.) - this is fatal,
    • или ошибка страницы - доступ к отображенной, но не резидентной странице памяти.

netlink(7), с другой стороны, — это специфичный для Linux механизм уведомлений и настройки, доступ к которому осуществляется с помощью обычных системных вызовов, таких как socket(2), sendmsg(2) и т. д. Позволяет получать и отправлять информацию из ядра и в него.

Таким образом, строго говоря, нет, netlink(7) не позволяет вам войти в режим ядра.

person Nikolai Fetissov    schedule 18.05.2012
comment
только что наткнулся на эту ссылку. stackoverflow.com/questions/4440584 / - person Raulp; 18.05.2012
comment
это также linuxjournal.com/node/7356/print и это 1984.lsi.us.es/~pablo/docs/spae.pdf . ... имхо, я должен сначала прочитать это. Вы все еще считаете, что netlink не используется для связи от пользователя к пространству ядра (режим) - person Raulp; 18.05.2012
comment
Прочтите ответ еще раз - фактический вход в ядро ​​​​при взаимодействии с сокетом netlink осуществляется с помощью обычных системных вызовов, таких как socket и sendmsg. - person Chris Stratton; 19.05.2012
comment
Хотя можно пойти еще дальше и заметить, что в то время как netlink sendmsg на самом деле является просто данными, идентифицирующими конкретный сокет для sendmsg(), на большинстве архитектур сам системный вызов является просто данными (номером системного вызова) для типа инструкции ловушки. Условный код в ядре выходит из этой узкой точки входа в код ядра, подходящий для его обработки. - person Chris Stratton; 19.05.2012