up 0 down

Потому что, как упоминалось в книге Понимание ядра Linux, Нормальный IO (без O_DIRECT) Будет делать копии данных с помощью функции вызовов copy_to_user() или copy_from_user(). Так рядом access_ok(), Более полный параметр адрес пользователя cheching осуществляется с помощью механизма под названием (по книге), как «Dynamic Address Checking: The Fix-вверх-код», который, как показано ниже:

пК адрес точной инструкции копирования внутри copy_to_user() или   copy_from_user() устанавливаются в __ex_table, когда есть неправильно   пользовательский ввод адреса с помощью системного вызова, страница обработчика неисправностей   будет делать сильфон чек так системный вызов является более безопасным:

———————————————————————

 if PC is in __ex_table then just kill the user program

 else kernel panic

———————————————————————

Мой вопрос, так как O_DIRECT в основном не делает копию пользователя/ядра, так что может быть менее безопасным с точки зрения ядра, потому что его отсутствие выше динамической проверки адреса?

Спасибо за помощь.

Редактировать:

За ответ Цыварева, в «менее безопасный» может быть не очень точными, мой вопрос может быть дополнительно elaberated как: Когда программа сделать прямые ввода/вывода и обеспечивает неправильный адрес, то в каких случаях сильфона будет происходить:

  1. программа будет убит (поскольку программа без O_DIRECT будет убит, так что, если программа с O_DIRECT не убьют, я считал, что это не так безопасно, в моем верхнем вопросе)
  2. или будет ядро ​​просто панические
  3. или ничего не делать

Может быть, мой вопрос слишком код конкретно, и я должен сделать некоторые эксперименты и чтение кода для поиска ответа на себе :) Благодарность