LINUX.ORG.RU
ФорумTalks

Гугл посчитал io_uring слишком дырявым и отключил его на Android и ChromeOS

 , , ,


0

4

Кто в танке: io_uring это интерфейс асинхронного IO в ядре Linux

Интерфейс io_uring, предоставляемый ядром Linux начиная с выпуска 5.1, примечателен поддержкой полинга (polling) ввода/вывода и возможностью работы как с буферизацией, так и без буферизации. В API io_uring разработчики ядра попытались устранить недостатки старого интерфейса aio. По производительности io_uring очень близок к SPDK и существенно опережает libaio при работе с включённым поллингом. Например, применение io_uring в библиотеке libuv позволило добиться повышения пропускной способности в 8 раз, а включение асинхронной буферизированной записи на базе io_uring в файловой системе XFS привело к снижению задержек в 80 раз и повышению скорости передачи данных в 2.7 раза. 

но

Анализ результатов действующей с 2020 года программы по выплате денежных вознаграждений за выявление уязвимостей в ядре Linux (kCTF Vulnerability Rewards Program) показал, что в 60% полученных в рамки программы заявок, эксплуатируются уязвимости в io_uring и ситуация не меняется со временем. 

https://www.opennet.ru/opennews/art.shtml?num=59297



Последнее исправление: alex1101 (всего исправлений: 1)

Объясните мне, почему самые крутые сишники, хакеры ядра, не могут не плодить дыры в коде?

alex1101
() автор топика
Последнее исправление: alex1101 (всего исправлений: 1)
Ответ на: комментарий от alex1101

Потому что люди ошибаются и программисты не исключение.

DrBrown
()
Ответ на: комментарий от alex1101

Язык позволяет ~всё и в какой-то момент трудно уследить за такими вещами. Особенно, если пишешь не один.

yu-boot ★★★★
()

Всего за связанные с io_uring эксплоиты было выплачено вознаграждений на сумму около миллиона долларов, при том, что за всё время существования инициативы общая сумма вознаграждений, выплаченных за уязвимости в ядре Linux, составила 1.8 млн долларов за 42 предоставленных эксплоита для ещё не исправленных уязвимостей (максимальный размер вознаграждения - 133 тысячи долларов).

У меня есть план:

  • Добавляем в ядро фичу с хреновой защитой.
  • Пишем эксплоиты
  • ??????
  • PROFIT
cocucka ★★★★☆
()
Последнее исправление: cocucka (всего исправлений: 1)

вложили миллион нефти и отменили - типичное гуглопрожекторство

Syncro ★★★★★
()

Диды как обычно.

ox55ff ★★★★★
()
Ответ на: комментарий от urxvt

это очень сложный софт, на пределе человеческих способностей

Что там предельного? Ядро и ядро. Какое-нибудь корпоративное legacy на java с годами превращается в еще более сложное нагромождение. Буфера при этом не рвутся.

unsigned ★★★★
()
Ответ на: комментарий от alex1101

Богатые инструменты проверок времени компиляции и кодогенерации (RAII, шаблоны, constexpr, проверка типов). Многий ошибочный код Си просто не скомпилируется если его переписать на C++.

X512 ★★★★★
()
Ответ на: комментарий от unsigned

Так потому что тут буфера и есть предметная область.
Ну это мое понимание. На 100% истину не претендую.

urxvt ★★★★★
()
Ответ на: комментарий от alex1101

У uring во имя производительности пришлось сделать сложный интерфейс, с которым легко получить гонку. Если бы вместо си использовалось safe подмножество rust, то всё бы просто тормозило и потеряло смысл.

snizovtsev ★★★★★
()
Последнее исправление: snizovtsev (всего исправлений: 1)

зачем его вообще включали (в ядро), вот в чём вопрос;

переусложнённый нестандартный интерфейс и персистентные буферы в юзерспейсе, это гарантированные проблемы. Помятуя давнее: и внутри ядра, оно как-то не вполне хорошо ложится на всё.

MKuznetsov ★★★★★
()
Ответ на: комментарий от alex1101

Потому что пограмировать учатся на блок-схемах, которые описывают последовательные алгоритмы, а тут асинхронная многопоточная подсистема, для которой количество возможных состояний велико. Понимать такой код сложно, даже если он выглядит простым. Здесь мог бы помочь некоторый инструментарий статического анализа кода, но, видимо, это не про кернел хакеров, да и существующие инструменты не совершенны

cobold ★★★★★
()
Ответ на: комментарий от MKuznetsov

переусложнённый нестандартный интерфейс и персистентные буферы в юзерспейсе, это гарантированные проблемы. Помятуя давнее: и внутри ядра, оно как-то не вполне хорошо ложится на всё.

Потому что диски становятся такими же быстрыми как сеть и деваться от этого факта становится все сложнее и сложнее.

cumvillain
()
Ответ на: комментарий от alex1101

Во-первых, система сложная, на пределе возможностей технологий. Во-вторых, не факт, что там «самые крутые сишники». В-третьих, общий уровень падает (см. «раньше трава была зеленее»).

seiken ★★★★★
()
Ответ на: комментарий от yu-boot

Позволяет, но на С трудней уследить за всем, чем на плюсах, и тем более Rust. Там Си много не явного, таже перегрузка функций. То есть, Си, более подвержен человеческому фактору, чем более новые языки.

Rossiks
()
Последнее исправление: Rossiks (всего исправлений: 1)
Ответ на: комментарий от seiken

общий уровень падает

А он везде падает, куда добирается крупняк. Там проще держать винтиков с зоной ответственности 1*1см, чем зависеть от гениев и энтузиастов.

yu-boot ★★★★
()

А вот и ещё одна слишком сложная технология

https://www.opennet.ru/opennews/art.shtml?num=59385

Структура «maple tree» представляет собой вариант B-tree, поддерживающий индексацию по диапазонам значений и спроектированный для эффективного использования кэша современных процессоров. По сравнению с «red-black tree» применение «maple tree» позволяет добиться более высокой производительности. Уязвимость вызвана ошибкой в обработчике расширения стека - в структуре «maple tree», используемой при управлении областями виртуальной памяти в ядре, замена узла в дереве могла произойти без выставления блокировки на запись, что создавало условия для обращения к области памяти после её освобождения (use-after-free).

greenman ★★★★★
()
Ответ на: комментарий от greenman

Почитал комментарии. Какая же духота. Как вообще можно так пресно общаться. Такое ощущения, что у них за спиной стоит трансгендер с плёткой и контролирует написанное.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Со страпоном. Хотя, оно же трансгендер… хотя, непонятно, из чего во что. Пусть будет со страпоном, чтоб наверняка.

pekmop1024 ★★★★★
()
Последнее исправление: pekmop1024 (всего исправлений: 1)
Ответ на: комментарий от alex1101

Объясните мне, почему самые крутые сишники, хакеры ядра, не могут не плодить дыры в коде?

Потому что дело не в сишике или хакерстве, а в том что любой сложный алгоритм, вдобавок направленный на производительность, вдобавок обязанный работать в связке с другими - так или иначе будет иметь неочевидные ухищрения (иначе бы все уже давно было бы придумано) с упором на скорость в ущерб безопасности.

windows10 ★★★★★
()
Ответ на: комментарий от windows10

Потому что дело не в сишике или хакерстве

Нет. Дело именно в сишке и хацкерстве. Просто нужно начать превентивно сдавать в дурку людей, пишущих в таком стиле:

do {
    if (*--p == '.') *p = '_';
} while (p != name);

Но сишники не могут нормально писать код. Надо нагородить трёхэтажные разыменования с инкрементами и желательно уместить всё в одну строчку, чтобы ни человек ни статический анализатор без поллитра не смогли на ревью заметить ошибку. И это если ревью есть, они же хацкеры, могут сразу в master main коммитить.

Особняком стоит вера сишников, что входные данные их алгоритмов находятся именно в том виде, в котором они думают. Никаких проверок, что в конце строки будет нолик и их чудесный цикл на трёхэтажных инкрементах с разыменованием сможет остановится, они не делают. А потом происходят ойойойой выход за границы буфера с повреждением чужой памяти и торжественное присвоение номера CVE. Но виноват в этом кто угодно кроме сишных хацкеров. Ага.

ox55ff ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)