LINUX.ORG.RU

CVE-2025-68260: Первая уязвимость в коде Linux на Rust

 , ,


0

4

Грег Кроа-Хартман анонсировал первую уязвимость с присвоенным CVE в части кода на Rust в Mainline-ядре.

Уязвимость обнаружена в коде подсистемы Binder, переписанном на Rust. Возможное состояние гонки в unsafe блоке может повредить указатели связанного списка и привести к краху ядра.

Уязвимость воспроизводится в ядре 6.18 при использовании нового, переписанного на Rust драйвера Binder.

>>> Оригинал новости на Phoronix

★★★★★

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

… в императивщине. А потом даже с банальным SQL возникают проблемы…

Это ложь. SQL прекрасно продуманный язык, и не встечал людей у которых с ним проблемы. Да, писатели на PHP красиво делают запросы в цикле вместо обработки одного запроса, но это другое. Декларачивчина - тоже другое.

P.S. И не у каждого мозг работает декларативно.

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

чтобы получить максимальную производительность, авторы осознано отбрасывают все safe методы и начинают на прямую управлять гуардами и памятью

Неправда. Они это делают не из соображений производительности, а потому что интрузивные списки вообще никак не ложатся на модель владения.

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

Это ложь. SQL прекрасно продуманный язык

Я что, где-то что-то сказал насчёт продуманности SQL? Он декларативный, и я только лишь сослался на это его свойство, всё.

не встечал людей у которых с ним проблемы

Да? А скольких людей вы обучали с нуля SQL после того, как они поизучали программирование?

писатели на PHP красиво делают запросы в цикле вместо обработки одного запроса, но это другое

Нет, это оно самое. Писатели не осиливают сделать декларативно, они привыкли инкрементировать итератор, отсюда как раз рождается такой подход к SQL.

не у каждого мозг работает декларативно.

Я не знаю ни одного человека, который потеряв ключи, подумает не «я помню, что забрал их со стола, я ехал в такси, я доставал кошелёк, мог выронить», а «надо позвонить в службу такси, если там нет, сходить к киоску посмотреть на земле, если нет, проверить карман куртки».

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

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

Я не знаю ни одного человека, который потеряв ключи, подумает не «я помню, что забрал их со стола, я ехал в такси, я доставал кошелёк, мог выронить», а «надо позвонить в службу такси, если там нет, сходить к киоску посмотреть на земле, если нет, проверить карман куртки».

императивном он строит алгоритм из полного списка шагов с фиксированным порядком, как будто для робота. Ну, может быть, аутисты какие-нибудь так и делают, но это в целом не норма.

А я не знаю ни одного человека, который объясняет дорогу не как «иди прям до перекрёстка, там сверни направо, пройди мимо двух домов, сверни налево, спустись в подземный переход», а декларативно описывая всю карту, или который вместо рецепта типа «варить помешивая 5 минут, потом убавить огонь, добавить специи и варить ещё 10 минут» описывает химико-физические характеристики продуктов. Даже ставя напоминание на телефоне человек императивно пишет себе же «позвонить Васе, поздравить с ДР».

Примеры можно найти в пользу и того и другого. И императивный и декларативный подход — норма, и зависит всё от ситуации и целей. Аутизм тут ни при чём.

Вот если человек способен мыслить только императивно или только декларативно, а по-другому никак, вот это уже наверное не норма.

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

Внезапно, статические проверки компилятора не спасают от необходимости иметь мозги

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

… строит алгоритм из полного списка шагов с фиксированным порядком…

Я всегда так делаю.

… может быть, аутисты какие-нибудь так и делают, но это в целом не норма.

Я не аутист. Просто у меня склад мышления несколько отличается от гуманитарного. И почему это не норма?

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

Я сижу сейчас читаю. unCORr -прав там не столько производительность, сколько особенность crate kernel, который имеет кучу unsafe что бы иметь совместимость (unCORr меня поправит где я не прав) с кодом ядра, в том числе kernel::list kernel::sync::*. Похоже создатели куда то очень спешили и портировали, как получилось (не мне их судить мне б до их уровня дотянутся). А Грег просто шлепнул заплатку, а дальше делайте как хотите.

что было

let death_list = core::mem::take(&mut self.inner.access_mut(&mut guard).death_list);
drop(guard); // проблема здесь
for death in death_list { ... }

что стало

while let Some(death) = self.inner.access_mut(&mut guard).death_list.pop_front() {
    drop(guard);
    death.into_arc().set_dead();
    guard = self.owner.inner.lock(); // здесь теряем производительность
}
Silerus ★★★★★
()
Ответ на: комментарий от Frohike

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

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

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

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

yvv1
()
Ответ на: комментарий от unC0Rr

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

И возразить-то нечего. Даже MIT от легендарного введения в программирование через SICP отказался :(

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

Решительно противодействую безумию

А как конкретно это будет работать в твоём воображении? Все ржущие над твоими перлами лопнут от смеха и не смогут контрибьютить rust-код?

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

Ты уже дурачишься.

Тссс… не пали контору!

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

Я не аутист.

Ты оживлённо срёшься в комментах под новостью об ошибке типа состояние гонки про парадигмы прогаммирования. У меня для тебя плохие новости… ;)

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

Я хочу на это посмотреть. Пациент явно никогда не бывал в ядерной рассылке и не знает про talking is cheap, show me the code. Он и на лоре-то обосрался с минимальными доказательствами, так что когда он придет к Линусу, то либо возьмет рекорд по наградным эпитетам, либо словит бан, как спам-бот.

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

«Rust-аманов» — с успехом их «ржи»!.. :))

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

андройдодяди должны страдать

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

Тебя забанили в гугле?

Зачем мне гугл, когда есть LOR?

Первая ссылка.

Спасибо! :)

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

Не могу сказать, лень лезть и смотреть, но из твоего комментария скорее всего достаточно:

Furthermore, all unsafe code is annotated with a SAFETY comment that explains why it is correct.

т.е. unsafe, но safe :)

Хотя на текущий момент они вообще оставили обе реализации драйвера рядом: https://github.com/torvalds/linux/blob/dd9b004b7ff3289fb7bae35130c0a5c0537266af/drivers/android/Kconfig (линк перманентный)

У кого будет желание, пусть считают: https://github.com/torvalds/linux/tree/master/drivers/android/binder

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

«иди прям до перекрёстка, там сверни направо, пройди мимо двух домов, сверни налево, спустись в подземный переход»

Человек, чтобы составить этот алгоритм, думает декларативно в любом случае, что-нибудь вроде: «Так, это после подземного перехода там, до него мимо двух домов пройти, но потом ещё свернуть надо». Да результат во многом декларативен, не так ли? Мы не говорим «заведи счётчик, дальше действуй циклом: пройди мимо дома, увеличь счётчик, если значение равно двум, выйди из цикла».

вместо рецепта типа «варить помешивая 5 минут, потом убавить огонь, добавить специи и варить ещё 10 минут»

Не встречали рецепты вроде: «для варки варенья мы приготовим сироп, в котором будем варить ягоды. Для сиропа нужен сахар и вода в пропорции 1:1…»?

описывает химико-физические характеристики продуктов

Зависит от глубины погружения, некоторые авторы рецептов только так и пишут

императивный и декларативный подход — норма

Для описания бытовых алгоритмов на высоком уровне - да, в целом для мышления - нет.

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

Я всегда так делаю.

Точно? Может быть, тебе так кажется?

Я не аутист. Просто у меня склад мышления несколько отличается от гуманитарного. И почему это не норма?

Почему эта фраза у тебя составлена не в императивном стиле?

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

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

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

Человек, чтобы составить этот алгоритм, думает декларативно в любом случае, что-нибудь вроде: «Так, это после подземного перехода там, до него мимо двух домов пройти, но потом ещё свернуть надо»

Нет, не факт, что в любом случае. Может и думает так, а может и сразу как последовательность действий это генерирует. Здесь ещё и проблема с тем, что это сложно проверить. А верить на слово тоже нельзя — при такой интроспекции людям свойственно пост-фактум формулировать рассуждения, которых у них на самом деле не было, причём они при этом не врут, а сами верят, что они были, это показано экспериментально. А полагаться только на свой мозг (которому, опять же, верить нельзя в таких вопросах, но даже если предположить, что можно) и потом экстраполировать на всех людей (или всех не-аутистов) — тоже неправильно.

Да результат во многом декларативен, не так ли? Мы не говорим «заведи счётчик, дальше действуй циклом: пройди мимо дома, увеличь счётчик, если значение равно двум, выйди из цикла».

Нет, не так. Мы просто используем более высокий уровень абстракции, но парадигма всё ещё императивная. Декларавтивность/императивность и уровень абстракции в целом ортогональны. Хотя, конечно, конкретно в программировании так сложилось, что низкоуровневые языки чаще императивные, а высокоуровневые бывают и такие и такие, от чего складывается впечатление, что декларативность и уровень абстракции как-то связаны. А связь здесь через то, как работает железо — чем ближе к железу, тем проще в реализации императивная парадигма, чем выше мы абстрагируемся, тем проще попробовать что-то ещё.

Не встречали рецепты вроде: «для варки варенья мы приготовим сироп, в котором будем варить ягоды. Для сиропа нужен сахар и вода в пропорции 1:1…»?

Что-то подобное бывает, да. Вообще более-менее сложные и при этом хорошо составленные рецепты обычно начинаются с декларативного перечисления ингридиентов, после которого идёт императивная последовательность действий.

В любом случае, я не утверждал, что декларативных рецептов не бывает. Моя позиция в том, что людям свойственно и императивное и декларативное мышление, а не что-то одно.

императивный и декларативный подход — норма

Для описания бытовых алгоритмов на высоком уровне - да, в целом для мышления - нет.

На основе чего сделан данный вывод?

CrX ★★★★★
()

да хватит уже этот руст везде пихать... он не безопасный и никогда не был таким.

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

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

Настолько, что даже функциональные языки вынуждены имплементировать императивное программирование (монады)? Сдаётся мне, дело вовсе не в мышлении...

quantum-troll ★★★★★
()
Последнее исправление: quantum-troll (всего исправлений: 1)
Ответ на: комментарий от unC0Rr

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

А это точно основной принцип? Кроме того, исчисление процессов больше похоже на ООП, чем на декларативные языки.

quantum-troll ★★★★★
()
Ответ на: комментарий от drfaust

А можно как-нибудь грамотных сишников в exim заманить? А-то там опять CVE нашли. Наверное неграмотные сишники пишут.

ugoday ★★★★★
()
Ответ на: комментарий от quantum-troll

Ты уверен, что монада Maybe имеет хоть какое-то отношение к императивному программированию? А вообще, императивное - узкое нелепое подмножество декларативного, потому ничего особенного в имплементации императивщины в функциональщине нет.

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

Ты уверен, что монада Maybe имеет хоть какое-то отношение к императивному программированию?

Насчёт Maybe не уверен, а вот State уже точно имеет.
Прогрессивные функциональщики уже не отрицают, что занимаются императивным программированием: ‘do’ Unchained: Embracing Local Imperativity in a Purely Functional Language (Functional Pearl)

А вообще, императивное - узкое нелепое подмножество декларативного

Если императивное программирование это в самом деле подмножество декларативного, то оно не может «сломать мозг». Школьная алгебра не ломает мозг, не позволяя потом учить общую алгебру.

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

уже не отрицают, что занимаются императивным программированием

Уже? Шутке «хаскель - лучший императивный язык программирования» лет двадцать.

Если императивное программирование это в самом деле подмножество декларативного, то оно не может «сломать мозг»

Может, если подавать его в чистом виде. Ну, как если учить пользоваться инструментами на примере топора. На протяжении лет. А потом выдать штангенциркуль, молоток и зубило, и вперёд работать.

Школьная алгебра не ломает мозг, не позволяя потом учить общую алгебру.

В некотором смысле, ломает. Замечали, как часто люди жалуются, что им в школе объясняли, что на ноль делить нельзя и квадратный корень из отрицательного числа, а потом сказали, что можно? Таким же образом привыкшие к «взять из этой ячейки памяти, прибавить единицу, положить обратно» люди с трудом осваивают декларативщину.

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

Ощущаю безумие юношеского максимализма :)

Постараюсь убедить Торвальдса выкинуть это из ядра.

П-ха-ха-ха! Я аж икнул от смеха :-D :-D :-D

zabbal ★★★★☆
()
Ответ на: комментарий от quantum-troll

исчисление процессов больше похоже на ООП, чем на декларативные языки

ООП вполне можно рассматривать как передачу сообщений между объектами - вполне себе классический паттерн из декларативных языков как раз.

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

ООП вполне можно рассматривать как передачу сообщений между объектами - вполне себе классический паттерн из декларативных языков как раз.

Декларативное программирование: программирование, где программа это последовательность действий, меняющих состояние мира.

quantum-troll ★★★★★
()
Ответ на: комментарий от unC0Rr

Может, если подавать его в чистом виде. Ну, как если учить пользоваться инструментами на примере топора. На протяжении лет. А потом выдать штангенциркуль, молоток и зубило, и вперёд работать.

А какие инструменты есть в функциональных языках, которых нет в императивных? В луа есть анонимные функции и оптимизация хвостовой рекурсии, это функциональный язык?

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

На ноль не делят и после школы (нет, «неопределённость ноль на ноль» это не деление на ноль, это плохая педагогика).

quantum-troll ★★★★★
()
Ответ на: комментарий от Frohike

В штаники не сикнул?

Откуда я знаю что там у тебя происходит? Сними да посмотри.

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

Так а зачем переписывать один ансейф на другой. По моему мнению проталкивание раста это диверсия майкрософта против гну линукса.

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

Ты точно программист, или просто теоретизируешь? Какое отношение линтеры имеют к производительности?

Он имел в виду валгринд+санитайзер которые в расте идут по умолчанию. Да все растеры их отключают, но при этом продолжают трубить про небывалую безопасность которой по факту то нет, особенно в случае с unsafe

uin ★★★
()
Последнее исправление: uin (всего исправлений: 1)
Ответ на: комментарий от quantum-troll

А какие инструменты есть в функциональных языках, которых нет в императивных?

Первоклассные функции. Лень, мемоизация. Чистые функции, изоляция эффектов и ссылочная прозрачность. Каррирование. Иммутабельность.

Когда всё это утащат в луа, он без сомнения станет функциональным языком. Пока в нём только отдельные элементы.

На ноль не делят и после школы

Я и не говорил, что эти жалобы валидны. Но люди реально начинают путаются.

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

Первоклассные функции.

Есть в луа.

Лень, мемоизация.

Получается, только хаскель является функциональным языком? В том же окамле никакой ленивости нет.

Чистые функции

Частный случай произвольных функций.

ссылочная прозрачность

Результат самоограничения (использования только чистых функций), а не фича языка.

изоляция эффектов
Каррирование

Вот это в самом деле фичи.

Иммутабельность

Результат самоограничения, а не фича языка.

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

Есть в луа.

Ну и молодцы, пускай всё тащат, и ADT с паттерн-матчингом тоже, и прочие фишки, которые уже все тащат. Чем больше - тем лучше.

Получается, только хаскель является функциональным языком?

Нет, не только, но если есть такие признаки, скорее всего язык не императивный.

Частный случай произвольных функций.

Результат самоограничения (использования только чистых функций), а не фича языка.

Иммутабельность

Э, не. Так про что угодно можно сказать, что это «частный случай» и «можно эмулировать в императивщине». Вся фишка в контроле со стороны языка, что ты не намешал в чистую функцию грязи и не мутируешь иммутабельное.

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

Э, не. Так про что угодно можно сказать, что это «частный случай» и «можно эмулировать в императивщине».

Да, именно. Императивный программист не видит в функциональном языке ничего принципиально нового — он видит лишь ограничения, которыми раньше он не был связан.
Эти ограничения могут быть как полезными (рассуждать проще), так и вредными (некоторые вещи нельзя выразить прямо).
Функциональный программист реализует императивное программирование, но императивному программисту не нужно реализовывать функциональное программирование, так как оно уже поддерживается в языке. Императивному программисту может потребоваться лишь более выразительная система типов, чтобы компилятор мог контроллировать эффекты.

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

В первых версиях точно был, да и собственно раст позиционировался как прикладной язык с рантайм-бензопасностью, у них на сайте еще код для консольного калькулятора висел и сами .rs файлы/код можно было даже запускать как питон в интерактивной среде.

Правда я так понимаю то была не фича раста, а фича llvm к которой этот компилятор изначально стремился, и которую в итоге задепрекейтили

uin ★★★
()
Ответ на: комментарий от quantum-troll

императивный конь в вакуоле

зачем пинать соломенных программистов?!

благо инету можно посредством первоисточников проследить полную эволюцию как техне так и сопутствующих метафор которыми травмировали прозелитов

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

Так а зачем переписывать один ансейф на другой.

Затем что в отличии от тебя разработчики GNU\Linux думают головой.

По моему мнению

Оно никому не интересно.

zabbal ★★★★☆
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.