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

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

Какой другой бранч, ты о чём? Функция

О том что после любой функции возвращающей int обычно идет проверка на то что этот int не ошибка :)))

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

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

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

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

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

Да не устраивают конечно, поэтому C в окно выкидывают примерно все, включая ядро.

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

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

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

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

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

Возникает в 100% случаев. Почему сишники упорно отрицают реальность?

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

Какой-то нуб кодил функцию и устроил его.

Это кодил собственно автор фикса, который пилит glibc с 2011 года.

Коммит мессадж:

    misc: syslog: Use fixed-sized buffer and remove memstream
    
    A fixed-sized buffer is used instead of memstream for messages up to
    1024 bytes to avoid the potential BUFSIZ (8K) malloc and free for
    each syslog call.
    
    Also, since the buffer size is know, memstream is replaced with a
    malloced buffer for larger messages.

Сишники полезли со своими статическими буферами и сделали CVE. Никогда такого не было и вот опять!

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

Сишники полезли

В который раз: не надо обобщать конкретного багодела на всех Си-программистов.

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

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

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

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

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

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

Дело в сишниках. Люди несовершенны и не могут быть идеальным статическим анализатором и при этом ещё и код быстро писать.

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

Я считаю что тут проблема в архитектуре языка, а не архитектуре человеков, но понимаю что мы просто смотрим на одну и ту же проблему с разных сторон.

Сишник это состояние души. Это святая уверенность в своей уникальности, помноженная на отрицание прогресса.

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

В который раз: не надо обобщать конкретного багодела на всех Си-программистов.

ага, обидься еще. Тем не менее программистов на расте называть «толпой нубов» ты не стеснялся

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

А зачем ты допускаешь вредосный код? Не ставь вредоносные программы и проблем не будет. Очевидно же.

В Windows 9x и прочих MacOS 9 даже защиты памяти не было. Любая программа могла насрать в любую область оперативы. А в MacOS 9 ещё и вытесняющей многозадачности не было, была кооперативная, а значит любая прога могла монопольно захватить процессор. И ничего, жили же как-то! Вот в те времена надо вернуться!

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

Тем не менее программистов на расте называть «толпой нубов» ты не стеснялся

Мне кажется ты что-то перепутал. Толпу нубов я упоминать конечно мог, в том числе пишущих на расте, по вот говорить что раст-программисты это и есть она - вряд ли. А так, упомянутая толпа имеется и в Си, и количество идиотских багов в популярном софте тому подтверждение.

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

Да нет же. Нужно вернуться во времена Z80 и MOS6502, когда сишка была непозволительной роскошью, а из доступных языков были только бейсик и ассемблер. Тогда заживем!

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

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

А в MacOS 9 ещё и вытесняющей многозадачности не было, была кооперативная, а значит любая прога могла монопольно захватить процессор

В win9x тоже можно захватить проц, достаточно запретить прерывания.

Вот в те времена надо вернуться!

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

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

Стандартная либа для Си, написанная на хипстерском расте! Какой удар по самомнению сишников!

А ничо, что компиляторов для свежего C на самом C сейчас нет? Шланг, гцц и прочие мсвс на плюсах написаны.

Да нет же. Нужно вернуться во времена Z80 и MOS6502, когда сишка была непозволительной роскошью, а из доступных языков были только бейсик и ассемблер. Тогда заживем!

Я под 6502 на хачкелле код недавно писал %)

Сишники посрамлены!

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

Так никто и не делал на них публичные хостинги.

Публичные хостинги не нужны. Это бич эпохи 2000х. Проще VPS сделать и не париться.

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

Ты сильно ошибаешься. Гугли в сторону unikernels/library os.

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

Не отнимает. Это просто лялекс говно и сосёт.

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

А ничо, что компиляторов для свежего C на самом C сейчас нет? Шланг, гцц и прочие мсвс на плюсах написаны

Ну, не все сишники настолько больны, чтобы еще и кресты ненавидеть лютой ненавистью :)

Я под 6502 на хачкелле код недавно писал %)

Ух тыж нихера себе. Можно подробней?

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

А ничо, что компиляторов для свежего C на самом C сейчас нет? Шланг, гцц и прочие мсвс на плюсах написаны

Ну, не все сишникинастолькобольны, чтобы еще и кресты ненавидеть лютой ненавистью :)

В смысле, не настолько? Икона сишников жырдяй Торовалтос, муж известной финской каратистки, плюсы лютой ненавистью ненавидит вон.

Я под 6502 на хачкелле код недавно писал %)

Ух тыж нихера себе. Можно подробней?

Да пожалуйста: https://hackage.haskell.org/package/sixty-five-oh-two

Там eDSL, напрямую компилирующийся в асм под 6502, но с проверкой типов при компиляции. Делаешь код на основе него и всё в ажуре.

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

Репа у меня svn но наружу я её не показываю - опасаюсь RCE. В гите бы тоже опасался, но он ещё и просто неудобный. Как допишу своё vcs без багов - будет оно, может даже с возможностью подключения по протоколам svn и git к ней.

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

Репа у меня svn но наружу я её не показываю - опасаюсь RCE.

АХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХ твою жеж мать блин как же я рыдаю. Прямо к-к-к-к-к-к-комбо!

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

Икона сишников жырдяй Торовалтос, муж известной финской каратистки, плюсы лютой ненавистью ненавидит вон

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

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

Икона сишников жырдяй Торовалтос, муж известной финской каратистки, плюсы лютой ненавистью ненавидит вон

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

А плюсы не согласился.

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

Вообще, я исходил из того, что многие местные любители сишки к крестам толерантны

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

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

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

Смешные отмазки сишников никогда не надоедают.

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

компиляторов для свежего C на самом C сейчас нет?

Какой свежести C?
https://github.com/libfirm/cparser подойдёт?

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

Не-а. Это ж весело! Меня реально забавляют отмазы сишников.

Хуже того, я не только бегаю из треда в тред, я их ещё и создаю!

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

Не, не подойдет. Компилятор на C (которым можно реально пользоваться, а не просто упражнение) это несколько миллионов строк чрезвычайно упоротого движка по оптимизации.

cumvillain
()