LINUX.ORG.RU

Переполнение кучи в glibc и другое

 ,


0

4

Рунет сегодня ожил, а тут свежачок подвезли:

https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=6bd0e4efcc78f3c0115e5ea9739a1642807450da;hp=8aeec0eb5a18f9614d18156f9d6092b3525b818c

И ещё другие баги в glibc 2.37 типа порчи памяти в qsort.

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

Перемещено hobbit из talks

★★★★★

Ответ на: комментарий от Stanson

Вон сколько на расте понаписали опупенно корректного кода. Весь жидхаб забит. Вот только весь этот код совершенно бесполезен и никому нахрен не нужен. :)

Ты опять врешь.

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

А была ли возможность этого избежать, используя другой язык?

Я это все к тому, что сложность может быть связана с предметной областью и не относиться к минусам языка. Прошивка для Ariane 4 была написана на Ada, но все равно произошло то, что произошло. Почему, например, с условным растом должно быть иначе? Раст безопасней Ada?

eyrell
()
Ответ на: комментарий от hateWin

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

Все самосвалы - машины. Но это не значит что все машины - самосвалы.

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

Есть масса примеров, когда абсолютно корректный код на какой-нибудь неимоверно корректной Аде приводил к факапам намного более трагичным чем тот, который ты сумел выкопать для обгаживания сишки. Одного 737MAX вполне достаточно, чтобы не считать «корректность кода» чем-то существенным.

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

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

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

Все самосвалы - машины. Но это не значит что все машины - самосвалы.

Это к чему было сказано?

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

Открой словарь и посмотри, что значит слово «корректный».

который ты сумел выкопать для обгаживания сишки

Ты полный придурок. Софт для Therac-25 был написан на ассамблере PDP-11. Я упомянул Therac-25, чтобы парировать твой тезис «корректность софта никого не волнует».

Есть масса примеров, когда абсолютно корректный код на какой-нибудь неимоверно корректной Аде приводил к факапам намного более трагичным

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

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

Одного 737MAX вполне достаточно, чтобы не считать «корректность кода» чем-то существенным

Лол. Это как раз-таки пример некорректного софта.

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

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

Хоть чего-нибудь типа Blender, FreeCAD, qemu, JVM, либы какой-нибудь гуёвой типа Qt/GTK, postgres/MariaDB и т.п..

Где оно? У вас же самый лучший язык целых 10 лет есть. Должно же быть хоть что-то взлетевшее, раз он так прекрасен.

Я вот прекрасно знаю в чём дело и почему нет ни единой популярной софтины на расте. И нет, дело вовсе не в самом расте как языке программирования. :)

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

Нахови хотя бы один крупный проект на расте который приобрёл популярность на уровне нынешнего популярного софта написанного на других языках

Огнелис. Дискорд. Думаю, fish достаточно популярен, как альтернатива bash.

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

Огнелис. Дискорд.

Два откровенно woke проекта куда кусочек rust’a засунули, лишь бы засунуть. При этом с точки зрения популярности, юзабельности или полезности софта абсолютно ничего не изменилось.

Думаю, fish достаточно популярен, как альтернатива bash.

Да-да, конечно-конечно. «достаточно популярен». И опять же, как всегда - не что-то своё, и даже не создание отсутствующего на линуксе аналога какой-нибудь полезной widows-only или MacOS-only софтины, а замена очередной широко искаробочной тулзы которая «лучше» только тем, что переписана на расте. Альтернатив bash’у написано уже 100500. Абсолютное большинство на сишке. Внезапно. Что доказывает 100501-я, написанная на rust’е?

Будем продолжать сову на глобус натягивать?

Вот почему бы просто не признать, что на расте никаких популярных проектов пока нет. На многих языках не написано ничего популярного, и ничего. Но для растамана главное ведь пиар и пропаганда, любой ценой создать иллюзию важности rust’а да?

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

Посчитай сколько в мобилке периферии, фирмварь которой написана, внезапно, на сишечке. Все эти магнетометры, голубозубы, GNSS, NFC и т.д. :)

Ядро на сишечке. А весь софт – нет.

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

А сишечка на C++. И дальше что? Софт на жабе, смирись.

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

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

Это необходимое условие, лол. Код должен выполнять то, что задумывалось при его написании. Если он выполняет что-то другое – машины перестают тормозить и врезаются в стену.

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

Да хоть на лиспе с перлом. Важно что ничего подобного не написано на расте.

Ряяяя. Забавно, что раст в этот топик тоже ты тащем-то притащил. Rust – не единственная альтернатива C. Можно zig взять.

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

Ядро на сишечке. А весь софт – нет.

Ты опять игнорируешь контроллеры периферии, бытовые приборы, промышленное оборудование и т.п. Ты понимаешь, что практически всё, что выткается в розетку или работает от батареек сегодня содержит в себе софт? Который объективно полезен людям ибо обеспечивает работу этого всего. И этого софта многократно больше чем каких-то PC/phone ОС и соответствующего софта, существование которых конечный пользователь осознаёт.

И да, практически весь этот софт который крутится на всём, что тебя окружает написан на сишечке. Живи в страхе. Из-за переполнения буфера тебя обязательно покалечит стиральная машинка, а что с тобой сделает электрочайник из-за UB - это вообще пипец неописуемый.

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

Код должен выполнять то, что задумывалось при его написании.

И каким боком тут его корректность? Можно написать абсолютно корректный код, на лучшем в мире языке без UB и переполнений буфера который будет творить лютую дичь. Можно даже написать абсолютно корректный код, который даже будет выполнять то, что задумано, но при любой сколь-нибудь стандартной ситуации будет творить лютую дичь. Это, кстати, гораздо опаснее чем код который просто всегда творит дичь, между прочим.

Корректный код - не значит правильный, не значит полезный и не значит что он чем-то лучше «некорректного».

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

Ты опять игнорируешь контроллеры периферии, бытовые приборы, промышленное оборудование и т.п.

У меня в одном телефоне приложений в разы больше, чем всего этого говна дома.

Ты понимаешь, что практически всё, что выткается в розетку или работает от батареек сегодня содержит в себе софт? Который объективно полезен людям ибо обеспечивает работу этого всего. И этого софта многократно больше чем каких-то PC/phone ОС и соответствующего софта, существование которых конечный пользователь осознаёт.

У меня полсотни приложений. Из микроконтроллеров дома роутер, робот-пылесос и стиральная машина. Какая разница получается? В 15 раз?

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

И каким боком тут его корректность?

Таким, что корректный код делает то, что ты от него ожидаешь. А некорректный – делает не то, что ты ожидаешь. Может в этом ваша проблема? Вы просто не понимаете что от вас нужно?

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

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

Ты сам написал «у тебя всё работает». Я запутался. Если у тебя работает, то что тогда исправлять?

Баг это когда скомпилированная программа неправильно себя ведёт.

Она и будет, просто ты ещё видимо не наткнулся на те условия, в которых это случится.

Тащемта, ты – это канонический пример того, что существует на самом деле минимум три различных языка программирования, которые называют C:

  • C как его представляют авторы стандарта;
  • C как его представляют разработчики компиляторов;
  • С как его представляет себе типичный сишник (то есть, ты).

Проблема в том, что это – мать его за ногу! – три разных языка.

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

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

Не вижу C++. C++ тоже говноязык?

Список кейсов UB в стандарте C++ видел? Тот, который страниц на 15 минимум.

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

А где в этом твоём комменте про геев что-нибудь? Непорядок!

Ты же, кстати, понимаешь, что теперь тебя будут не только с говнокодом на C ассоциировать, но и с геями? Говорим Stanson, подразумеваем геев. Говорим про геев, подразумеваем Stanson. Тебе так и до модерирования ЛОРа недалеко!

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

Мне кажется любой тред со Стасоном выглядит вот так:

- Сишка говно

- Сишка рулит

- Меня вчера побила сишка и я больше не хочу

* в чат заходит Стасон*

- А ВОТ ЗНАЕТЕ ЛГБТ ПОВЕСТОЧКА ОНА НЕ ПРОСТО ТАК ВЕДЬ C В СТИРАЛЬНОЙ МАШИНЕ

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

можешь более конкретно расписать где там там сишечка встречается и, что более важно, почему именно она там была применена? а то ты как сейчас прям как вадос (который тут @vaddd) с явными признаками салонного слабоумия и в каждом треде ему есть что ответить.

если вылезти за пределы компуктера, то окажется что

контроллеры периферии

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

промышленное оборудование

там надежность котируется, поэтому после 80х, когда 8-битная параша стала отмирать вместе с борьбой за каждый доступный бит, там «графическое программирование» из блок-схем последние лет эдак 30. короче сидят инженеры и квадратно-гнездовым методом програминут эти промышленные контолеры на вот просвещайся, https://en.wikipedia.org/wiki/Simatic считай что это чуть менее чем все заводы, автоматизированные линии и все прочее. даже тупое «хлебопекарное» оборудование промышленного уровня. (а если там конкретно не сименс, то какой-то аналог от другой корпорации +- такой же)

в микроволновках и посудумойках стоят ASIC SoC, которые не требуют погромирования. (а если и требуют, то опять же графическое все будет)

в стиральных машинах - там тоже кодогенерация после графического погромирования в кастомных контроллерах.

в кондиционерах тоже самое. в инжекторных двигателях тоже самое.

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

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

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

а что с тобой сделает электрочайник из-за UB - это вообще пипец неописуемый.

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

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

У меня - не «на моём компе» а «на моём коде», в целевых условиях его работы. Если я что-то публично распространяю то целевые условия очевидно моим компом не ограничиваются.

А языка не три а больше.

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

Проверяйте

Запросило пароль, потом куча 0 и 1 на конце и надпись «Доступ запрещен». Хотя, обновляюсь регулярно, возможно в моей генте уже исправление подъехало.

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

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

Вон сколько на расте понаписали опупенно корректного кода.

Именно так, много уже написано, а многое еще напишут - хорошего, годного, корректного. Из моего личного must have софта, который есть на всех моих машинах:

  • alacritty
  • nushell
  • broot
  • yazi
  • fd
  • ripgrep

из тулкитов - polars

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

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

Два откровенно woke проекта куда кусочек rust’a засунули, лишь бы засунуть

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

Да-да, конечно-конечно. «достаточно популярен». И опять же, как всегда - не что-то своё

Форком какого проекта является fish? Почему ты требуешь какой-то особой оригинальности от проектов на расте? По-твоему, на Си пишут много совершенно уникального кода?

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

Так онл разве программисту видно? Это нутря проц-память. Для сишника память все равно линейна.

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

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

Я учитываю кеши на любом императивном ЯП когда сортирую пузырьком, а не слиянием. Что-то еще?

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

При этом, в стандарте C написано, что вся память плоская и одинаковая.

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

А как тогда работает CMSIS для всей встройки? Вопрос исключительно, чтобы разобраться, без троллинга.

Вот я вижу присвоение адресов переферии, далее вижу их каст к структурам. Выше, по иерархии, это будет использоваться как USART1->DR. Чем это отличается от условного 0xDEADB00B->DR? И почему это UB использует в каждом CMSIS для любой встройки?

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

А как тогда работает CMSIS для всей встройки? Вопрос исключительно, чтобы разобраться, без троллинга.

С божьей помощью. Точнее, надо полагаться на конкретный компилятор и что его авторы не решат внезапно это UB превратить в настоящее UB.

Там есть пачка противоречащих друг другу утверждений в стандарте. В одном месте написано, что все указатели должны указывать на валидные объекты, иное будет UB. В другом, что ты можешь кастовать int к указателю, но это implementation-defined и не гарантируется.

Короче, всё как всегда и держится на честном слове.

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

Так онл разве программисту видно? Это нутря проц-память. Для сишника память все равно линейна.

Нет, для сишника память не линейна. Потому что тебе нужно учитывать особенности строения памяти, чтобы постоянно мимо TLB кеша не мазать.

cumvillain
()