Исследователи из команды Google Project Zero разработали метод эксплуатации уязвимостей в ядре Linux, вызванных разыменованием указателей NULL. До сих пор проблемам в ядре, связанным с разыменованием указателей NULL, не уделялось должного внимания, так как доведение таких проблем до атак, приводящих к повышению привилегий или выполнению своего кода, считалось нереалистичным (непривилегированным процессам запрещён маппинг в нижней области адресного пространства). Как правило подобные ошибки приводят к генерации ядром oops-предупреждений, после которых проблемные задачи завершаются и состояние восстанавливается без необходимости остановки работы системы...Подробнее: https://www.opennet.me/opennews/art.shtml?num=58518
Что-то решение с лимитом oops'ов, после которых следует panic, выглядит каким-то жутким костылищем.
Стандартная проблема. Типа если вместо этого везде напихать проверок на NULL, то производительность понизится.
Просто обнулить refcount, как я понял, нельзя? Не понимаю проблемы с событием, которое УЖЕ ловится и спокойно предотвращается. :-/
Более практичный способ: отслеживать долгие чужие процессы... Ой! А откуда взялся чужой процесс? Кто принёс файл эксплоита и сделал его исполняемым?
Осталось понять какой процесс "чужой"
Ну смотри, есть сервер, как на него попадают программы? Либо ты сам поставил (в этом случае защищать что-то бесполезно от ССЗБ), либо кто-то как-то по сети... Отсюда и начинаем плясать: почему есть дыра для установки троянов?!
> везде напихать проверок на NULLДля начала - замораживать счётчик на -1, чтобы не было переполнения.
Что-то подсказывает, что refcount должно сделать 64-битным...
> особенности обработки состояний "oops", в результате которых можно добиться увеличения значения счётчикаЧто-то подсказывает, что копать надо ^^^туда^^^. Что значит "можно добиться"?!
Вот это как раз вообще не решение. И 64-битный счётчик может переполнится, просто на это нужно чуть больше времени.
Да. примерно на 8 * 2^32 дней.
ага, тока если с 32 разрядами они справились за 8 дней, то с 64 разрядами уйдёт всего лишь 2^35 дней, что займёт больше 90 миллионов лет
А мы никуда не торопимся
А типичный компьютер проработает 90 млн лет? Вам придется землянам технологии проапгрейдить малость на более надежные.// учитесь нубы как алиенов на технологии разводить надо!
Хороший программист и хороший код не должен опираться на такие соображения. Дело не в том, проработает компьютер или нет. Дело в том, что если программа предполагает что не проработает, ей место в мусорке.
90 миллионов лет без единого разрыва !!!
== Антон Уральский ==
Вот это ты щас быканул на всю криптографию, которая и опирается на то, что единственный гарантированный способ взлома (брутфорс) на текущих возможностях электронно-вычислительной техники займет нецелесообразное количество времени (миллионы лет). Опора на "соображения" зависит от предметной области и "правила игры" в ней. Но я согласен с одним из предыдущих комментаторов, что лимит oops это инфернальный костыль и нормальные люди тупо расширяют диапазон значений до 64 бит. В цифровую эпоху многие проблемы прямее всего решаются расширением диапазона - Unicode, IPv6, например.
Вопрос в том, что значит "опирается". Что случится если кто-то забрутфорсит пароль? Ничего, всё будет работать нормально. Это штатная ситуация для ПО. А тут произойдёт нарушение внутреннего инварианта программы. Вот этого быть не должно. Ожидать что временный файл созданный с помощью гуида не совпадёт с существующим файлом никогда — это нормально. Не вписать проверку и не предусмотреть действий в случае если всё же гуиды совпали — не нормально.
> Вопрос в том, что значит "опирается". Что случится если кто-то забрутфорсит пароль?Он получит неавторизованый доступ в мои системы, например. Ничуть не хуже чем от сабжа. Даже лучше - через легитимные интерфейсы для белого человека а не всякую ерунду.
Вы смотрите с точки зрения пользователя, а я с точки зрения программиста, которому не платят за работу. С точки зрения программиста мне надо чтобы моя программа работала правильно, а кто там к чему получит доступ мне не важно.
> а я с точки зрения программиста, которому не платят за работу.В этих допущениях можно довольно далеко зайти.
> С точки зрения программиста мне надо чтобы моя программа работала правильно,
Осталось определиться что мы считаем "правильным". С практической точки зрения все и вся предусмотреть невозможно. И если следующие сто лет программа точно не создаст проблем, знаете, возможно, разбираться с изменениями реальности через столетие лучше предоставить другим чем пытаться предусмотреть это. Иначе будет наивняк, как с произведениями про хайтек из прошлого века. Сколько из них предсказало эволюцию цифровых технологий правильно?
> а кто там к чему получит доступ мне не важно.
Сферический перфекционизм в вакууме. Ну понятно, небось еще и бсды используете, с таким паттерном мышления было бы не удивительно.
> Ну понятно, небось еще и бсды используете, с таким паттерном мышления было бы не удивительно.Бинго!
Булшит бинго. Возможно бесконечное количество абстракций, а идеал недостижим. Поэтому главное во всей этой гонке за идеалом - уметь вовремя остановиться, зафиксировать достижения, и сделать из этого что-то практически полезное. Иначе может так получиться что нео сольется с матрицей, релиз чего-то адекватного не состоится никогда, ведь в погоне за идеалом можно забыть зачем вся эта канитель вообще затеяна. И вот именно BSD явяляют собой очень хороший пример вот этого вот. Где-то в своих кельях господа из Беркелея давно забыли зачем люди пользуются компьютерами, имея на этот счет какие-то свои, весьма синтетические идеи....поэтому я предпочитаю уметь вовремя остановиться в гонке за абстракциями. И если программа сломается через 100 лет - мое чувство идеала останется недовольным, но, а знаете что, проблемы лучше решать по мере их поступления. Может, программа через 100 лет никому не потребуется. Ну, мало ли, появится пять штук лучше. Или квантовые компьютеры сменят некоторые парадигмы. Или AI всех двуногих в зоо определит, и будет ржать с потуг "этих примитивных амеб". Ну и зачем мне спрашивается мое время здесь и сейчас на полирование хрома тратить? Пусть кому актуально и потратит его - когда - и если - это станет актуально.
> Где-то в своих кельях господа из Беркелея давно забыли зачем люди пользуются компьютерами, имея на этот счет какие-то свои, весьма синтетические идеи.Именно так рождался Линукс и много другого замечательных вещей, без которых была бы одна винда.
> сделать из этого что-то практически полезное
Сделать что-то практически полезное — это замечательно, но сделать что-то практически бесполезное, по-моему, гораздо круче.
> Именно так рождался Линукс и много другого замечательных вещей,Линукс появился, когда некий студент устал ждать когда его осчастливят академики. Одни академики в лице таненбаума занимались черти чем, наворачивая концепции с ... рестриктивной лицензией и игнором насущных проблем пользователей. Другие пшикали на то что 386 это фи, покупайте другие процы. Третьих судил AT&T за то что они посмели возомнить себя равными с коопорацией и играть не в одни ворота, взяв их код. Куда бедному студню было податься? Он послал этот бред в пень да и сделал свое, как работало.
И вот через месяц пыхтений его нечто пошло на взлет. Через месяц он кодил свою систему в своей системе. И обрек себя на то чтобы сделать ее хорошей, как минимум в пользовательском понимании, все же когда твой код плохо работает, и плохо от этого именно тебе, есть сильный зуд его починить.
> без которых была бы одна винда.
NT так то нормальное ядро, деланое командой VAX, чтоли. Но маркетинг все изгадил, разумеется. Если кто думает что линух нельзя изгадить так же, может посмотреть на андроида. Но там в силу опенсорсности больше возможностей потрепыхаться.
> Сделать что-то практически полезное — это замечательно, но сделать что-то практически
> бесполезное, по-моему, гораздо круче.Ну тут уж кому что. Мне интересны работающие компьютерные системы решающие те или иные задачи, чтобы sci-fi стал реальностью, все такое. Для этого мне нужны цифровые инженерные и компьютерные системы. И совсем уж бесподезные системы мне не интересны. Странно понимать прелести электричества и магнитизма и при этом сидеть в пещере у костра.
> Хороший программист и хороший код не должен опираться на такие соображения. Дело
> не в том, проработает компьютер или нет. Дело в том, что
> если программа предполагает что не проработает, ей место в мусорке.Поэтому теоретиков от программирования и не любят - вечно решают какие-то теоретические задачи. Да, моему высохшему (а может уже и окаменевшему) скелету будет очень полезен взлом компьютера, давно превратившегося в тыкву. Впрочем если у вас будет компьютер способный работать 90 миллионов лет, а желательно и такие же технологии для двуногих, добро пожаловать!
блин, это теперь везде регексп 20[0-9]{2}-[0-9]{2}-[0-9]{2} везде переписывать, и что писать то?
2[01][0-9]{2}, или [0-9]{4,}-[0-9]{2}-[0-9]{2}, да ну бред же, и так полно корявого ПО которое допускает ввод дат из других веков, а ты блин сиди и думай где и как опечатка была.
> блин, это теперь везде регексп 20[0-9]{2}-[0-9]{2}-[0-9]{2} везде переписыватьЗачем? Ограничение, разумное или даже нет, — это нормально. Программа не обязана поддерживать произвольные даты. Никакие внутренние инварианты от этого не нарушатся, и программа будет одинаково хорошо (или плохо) работать что в 20 веке, что в 100-м и это никак не помешает ей быть запущенной в 20 веке и проработать непрерывно до сотого.
> Зачем? Ограничение, разумное или даже нет, — это нормально.Ну это вроде стеб был, у всего есть границы применимости
А если каждый упс добавить паузу в 0.1 секунду
а я кол-во тредов увеличу на 10
Ну может и не каждый чих, а то такие ли драйвера бывают, да ещё умудряются как то работать с мешком ошибок, но ход мысли нормальный.
Это он и есть. И это замена шила на мыла теперь это DoS-атака.> После достижения лимита, который по умолчанию выставлен в 10 тысяч oops (при желании можно изменить через параметр oops_limit), ядро будет инициировать переход в состояние "panic" с последующей перезагрузкой
10000 срабатываний это примерно 2**log2(10000) ~= 2^13 срабатываний. Простая арифметика говорит, что если 2^32 делает систему уязвимой за 8 дней, то с патчем система вешается за 8 * (2^13/2^32) * 24 * 60 * 60 == 1.3 секунды. Отличное исправление, что тут скажешь. С другой стороны, хотя бы о попытке станет известно мгновенно
Не вешается а паникует. Ну и собственно если у вас 10K OOPSов вылезло, у вас точно что-то идет сильно не так и вы врядли хотите чтобы это продолжало работать. OOPS для начала означает ошибку ядра после которой гарантии корректной работы системы уже нет.
В новости же написано, что можно выставить кастомное количество упсов.
иначе слишком ресурсоёмко чужие серваки ронять
а тут - по быстрому прогнал, в лимит упёрся и система ушла в перезагрузку
причём, можно умудриться чтобы из цикла перезагрузки система практически не выходила - только загрузилась - загрузилась вирусяка - опять лимит - опять перезагрузка
Это костыльное решение проблемы oopsов в неподдерживаемых драйверах. Ибо нефиг деньгой поддерживать корпорации, которые проприетарные драйверы делают, но не делают их качественно. И ибо нефиг в ядре держать неподдерживаемые драйвера, делающие oopsы. С растом их станет меньше.
Ключевое слово, что станет меньше. И хакать смогут лишь те, кто может это финансово и по мощностям это себе позволять.
> С растом их станет меньше.Естественно, меньше. Нет кода - нет проблем.
С растом будут новые проблемы, скорее всего даже хуже
Потом не говорите что я не предупреждал.
Десять тысяч упсов у ядра само по себе уже достаточный повод для паники.
Гугл молодец, хороших спецов нашёл. Прямо уважение им от анонима.
Работал, сервер, работал и вдруг перезагрузился.
Oops it did it again, this limit system reboot this world.
10000 kernel oops = 1 kernel ёпс
Значит нужно настроить лимит на 20000000000 упсов
> Работал, сервер, работалВопрос: как на сервере оказался исполняемый эксплоит и кто его запустил?
Вдогонку: а никого не будет смущать, что на сервере 8 дней вертится какой-то левый юзер?
Алсо с таким числом oops'ов на диске, вероятно, закончится место под логи. О том что это будет дико грузить систему даже упоминать неудобно. Перцы из гугли возвели хакеров и солонки на новый уровень.
Это смотря сколько серверов. Если один-два, то конечно. А если сотни тысяч, как у гугла, то никто и не заметит.
> никто и не заметитНу да, там в гугле только вручную ходят по компам в ДЦ и проверяют, тыкая в клавиши...
> Это смотря сколько серверов. Если один-два, то конечно. А если сотни тысяч,
> как у гугла, то никто и не заметит.Кроме аналитики и логинга ловящих аномалии и сбои, ога.
Надопросто добавить ещё один счётчик, который увеличивается на единицу, когда счётчик oops переполняется. Назовём новый счетчик wtf.
Ну дык - в 2.7 это и предложено ...
Я бы сделал счётчик oops 256 битным
называй, разрешаю
Выше предложили более лочичное увеличение разрядности существующего.
> Выше предложили более лочичное увеличение разрядности существующего.Лол. Я предложил то же самое. Вон из профессии! 🤗
Создать второй счётчик и сменить тип у первого, это не одно и тоже, поэтому это тогда тебя нужно гнать
> Создать второй счётчик и сменить тип у первого, это не одно и
> тоже, поэтому это тогда тебя нужно гнатьТы и верно конь. Давай, ещё мой код покритикуй (которого я не писал) 😂
Тебя забыл спросить насчёт вон.
Предложен новый способ ронять сервера конкурентам.
После достижения лимита, который по умолчанию выставлен в 10 тысяч oops (при желании можно изменить через параметр oops_limit), ядро будет инициировать переход в состояние "panic" с последующей перезагрузкой, что не позволит добиться необходимого для обнуления refcount числа итераций.
повторяю, для ИмяХ: "при желании можно изменить через параметр oops_limit".
Почему нельзя по достижению лимита выставить это значение опять в 0? Или почему бы не перестать его прибавлять при достижении лимита?
это счетчик ссылок. Зачем тогда вообще счетчик, если по описанным тобой правилам там будет неизвестно что?
Статья говорит что это счетчик предупреждений. Кому теперь верить? Это я уже не говорю на что он должен ссылаться на завершенные задачи?
статья явно говорит, что используется переполнение счетчика ссылок
> метод атаки основывается на особенности обработки состояний "oops", в результате которых можно добиться увеличения значения счётчика ссылок (refcount), что в свою очередь может привести к переполнению счётчика и освобождению памяти, связанной с refcount.
> переполнение счетчика ссылокссылок - куда? какой объект?
на объект типа mm_struct
кто владелец? каковы условия срабатывания счётчика? куда "передаётся" структура, раз срабатывает счётчик? Что за NULL? Куда указывает? Кто хранит?
> кто владелец?я. Комп мой, ячейка памяти ссылающаяся на структуру тоже куплена за мои деньги
дружище, ты пьян, ты на каникулах или тебе не с кем поговорить?
В первой же ссылке из новости расписаны условия срабатывания счетчика, а так же, что и почему происходит. Если информации недостаточно, то могу подсказать ссылку на исходники ядра.
>Или почему бы не перестать его прибавлять при достижении лимита?И выдавать You sick bastard
Да это называется умный счетчик.Если у тебя так много "проблемных задач" которые завершаются и тебе для чего-то надо знать их количество это уже вызывает вопросы. Всё что надо делать это сравнивать это значение с нулем зачем его бесконечно прибавлять ещё и без проверки переполнения ума не приложу.
Можно делать метрику oops за последние 24 часа. А потом хвастаться перед коллегами сколько у кого oops.
То есть раньше надо было провести 4.3 миллиона oops (что потребует примерно 8 дней), чтобы эксплуатировать уязвимость.
Теперь надо 10 тысяч oops (что потребует примерно 10 минут), чтобы перезагрузить сервак.Отлично пофиксил. Идеально, я бы сказал.
Верни старое поведение oops_limit=0xFFFFFFFF
oops_limit можно изменить
(но в прочем, свобода выбора она такая, что выбирают то, что навязывают в результате ограниченности мировоззрения)
то есть получение хакером рутового доступа к серверу лучше, чем просто перезагрузка этого сервера?
Откуда взялся хакер на сервере? Как он смог сделать исполняемый файл? Где он его разместил, что смог запустить?
Загрузил в папочку cgi-bin
> в папочку cgi-binОткуда у левого юзера, непонятно ещё как попавшего на сервер, права на запись туда?!
вы таки хотите сломать чей-то сервер, что так интересуетесь?Заказываете виртуалку с доступом в интернет и ставите на нее вордпресс. Так чтобы можно было картинки загружать, плагины всякие ставить, обновлять его одной кнопкой из его же админки, ну и просматривать без ограничений. Обычное использование в общем, как у всех.
Потом расскажете, откуда там права на запись взялись.
ну сломаешь ты сам свою виртуалку... у тебя и так туда доступ есть. Это как локалхост молотком расфигачить.
Докер - это как виртуалка, только oops.
Кому нужен вордпресс от пыхающих. Прогрессивные посоны на Раст пишут. Там exec и eval нет, а все пути к точкам входа к бинарнику гвоздями прибиты.
Украл ключи у разработчика, как обычно. Пропатчил библиотеку, которую ленивый нодовец тащит не глядя. Сынишка похвастался что с папиного компа играть лучше. И тд
Опять для получения рута нужен рут?!
Сидят два бурундука на берегу реки и вяжут шапочки. Подходит слон и спрашивает:
- Река глубокая?
Первый бурундук:
- Глубокая, очень...
Слон:
- А дно как?
Первый бурундук:
- Песочек, отличное дно...
Ну слон разбегается, ныряет, в реке ударяется головой об камни, застревает, ноги торчат, везде кровь..
Второй бурундук первому:
- Зачем ты слона обманул?
- А зачем ты вчера мою шапочку распустил???Вы ведь понимаете что речь не о сервере вообще. Вы знаете что Linux имеет модель колец защиты. И если такая модель применяется, то она должна работать как положено.
Ток если строго по формулам, то примерно одну-две секунды
Типа теперь можно на изи вызывать панику ядра? Это они починили или доломал?
DoS как способ защиты от разыменования NULL
Я вот прям совсем не специалист, по почему бы это число при достижении лимита просто не обнулить? Даже если лимит поставить максимально возможным.
В реальном мире не бывает нулей.
Других чисел и математики в реальном мире тоже нет. С другой стороны, если мы все сидим в Матрице, то нули и единицы более реальны чем всё что нас окружает.
> В реальном мире не бывает нулей.Вот те раз, компьютерам это расскажи с их двоичной системой счисления.
Вообще "ноль" - философическая проблема. Вот лежит яблоко на столе - это 1. А если стол пустой, сказать, что ноль яблок? А почему яблок, а не арбузов? Их же тоже нету. Видите, как при нуле сразу потерялись единицы измерения? Получается, ноль не имеет измерения, что уже делает его гипотетическим.
В вашей философии явно не было "типов данных" и "auto", когда оно соответствует чему угодно. Если вам нужны арбузы, 0 арбузов столь же валидно как 0 яблок или межгалактических сверхсветовых крейсеров. Универсальный тип, подходит ко всему.А так то компьютеры много чего "гипотетического" делают. Скажем GPS - рисует некую виртуальную координатную сетку, грубо говоря. Ее нет. Но если допустить что она все же есть, в ней можно адресовать объекты. И это работает.
> 0 арбузов столь же валидно как 0 яблокВот ты и подтвердил, что 0 не имеет типа, а значит, не существует.
Давай, расскажи мне, сколько в реальном мире живых тилацинов.
А refcount продолжит щёлкать дальше. Дальше последствия описаны во 2-м абзаце новости.
Видимо замораживать процесс вызывающий oops на секунду (а после некого лимита и вовсе убить, пусть переписывают на раст если с первого раза не доходит) звучит как что то очень умное и не приходящее в голову, вместо этого лучше внедрить возможность DoS атаки
Пришлите им свою реализацию
Когда уже научат что-то вроде 0dayGPT - чтобы нашла все уязвимости (на основе находимых ранее идей) - исправила бы всё разом.
В любого размера кодовой базе
> ядро будет инициировать переход в состояние "panic"Вместо rce будет dos. Поменяли понос на золотуху.
то есть лучше, чтобы вместо dos был rce? вы что, совсем тупые?
Тупой здесь ты. Читай внтмательно:
> счётчик ссылок становится равен нулю, память освобождается, но фактически остаются рабочие ссылкиПравильное решение - при обнулении счётчика удалять "осиротевшие" ссылки.
Счетчик как раз и используется для определения наличия используемых указателей. Нулевое значение счётчика показывает, что память уже не используется и ссылок не осталось.
> ссылок не осталось
> но фактически остаются рабочие ссылкиМожет быть, всё-таки попробуешь прочитать текст новости?
Нулевой счётчик показывает, что ссылок не осталось и память можно считать свободной, но так как значение счётчика изменено на ноль внешним воздействием он уже не отражает реальную ситуацию и на деле ссылки остаются и память продолжает использоваться, в этом и суть уязвимости.
Это вам не питончик с хрустяшкой, на минуточку, "ссылку" может не получиться удалить вообще.
Допустим ссылка лежит в других структурах, на которые завязаны ещё структуры. Будем все удалять?
Что будем делать с процессами, держащими хендля или ссылкась на эти структуры? Прибивать?
Что будем делать, если у нас ссылка в DMA ушла? :D
В ядре линуха всё настолько плохо? Ну офигеть...
Ещё раз, ссылочка ушла в DMA, и вот прямо сейчас внешнее устройство забрасывает в эту область памяти данные.
Остановить этот процесс никак. Чего где будем удалять?
> Ещё раз, ссылочка ушла в DMA, и вот прямо сейчас внешнее устройство
> забрасывает в эту область памяти данные.
> Остановить этот процесс никак. Чего где будем удалять?Вообще, если ссылка на число оопсов ушла в DMA, Торвальдсу кому-то надо 314-ы дать - и спросить какого черта в их коде творится вообще.
Я про структуры с рефкаунтом.
Можно ронять сервера виртуального хостинга, делаешь аккаунт даже бесплатный. Делаешь 10000 разименований за 2 секунды. Сервер уходит в перезагрузку на 10-20 минут.
А с kvm такая фича работает? Можно ли за 10000 разьименований положить хостовую ос?
> Можно ли за 10000 разьименований положить хостовую ос?Об этом гугл расскажет потом, когда выполнит задачу по взлому целевых серваков.
> требуется около 8 дней непрерывной генерации состояний "oops". В случае успеха эксплоит позволяет добиться выполнения своего кода на уровне ядраЧем определяется вероятность успеха? Что-то в статье много мутных мест. Не сказано даже, какие версии ядра подвержены.
> для проведения атаки при помощи предложенного эксплоита требуется около 8 дней непрерывной генерации состояний "oops"...
...
Ну так-то примерно на 7 дней Зоркий Глаз всё-таки что-то заметит, если он не девляпс, конечно же :)
У меня куча вопросов в связи с этой проблемой и её гениальным "решением". Зачем вообще в ядре на таком низком уровне выделение памяти и счётчики ссылок? Почему нельзя просто молча прибить процесс, без игр с кусками памяти? Почему нельзя сразу при старте ядра зарезервировать минимально нужный кусок памяти и не "удалять" его никогда?Это убогое проектирование. Как это на тех же на встраиваемых устройствах должно работать?
Вообще, судя по всяким OOM killer'ам разработчики линукс ядра относятся к памяти абсолютно расхлябанно, как к какому-то бесконечному ресурсу. "Падает из-за нехватки памяти? Ну так просто купи_новый_телефон/доставь_ещё_терабайт_в_сервак"
Ну не будем забывать, что сам линь начинался как proof-of-concept финского студента для поднятия ЧСВ, и которому не жалко было дать отдушину нёрдам планеты всей, которые в свободное от работы на дядю время оттачивали навыки использования нестандартных структур данных (интрузивные списки, например) на уровне ring0. Да и для встраиваемых систем есть более подходящие вещи типа FreeRTOS и Zephyr.
Ждём, когда с автообновлениями сделают неотключаемый таймер перезагрузки в пять минут. Вышел сервер в интернет, понюхал обновлений и в ребут.
Ну и правильно. Ставишь балансировщик на винде, чтоб не перезагружался, а за ним зоопарк линуксовых машин. Представь как будут хакеры материться, когда таргет постоянно ребутается :)
1. Поменять счётчик на size_t и для 64х систем оно станет 64 битным.
2. Собирать с -fno-delete-null-pointer-checks и добавить проверки в код.
0. Сделать, как в паскале длинные строки: если счётчик -1 (FF...F), это константный объект, счётчик не трогаем. И сразу все проблемы снимутся.
> если счётчик -1 (FF...F), это константный объектне сработает.
в этом случае увеличение количество ссылок а потом уменьшение их на тоже самое (больше) значение -- заставит пройти через нуль (не в том месте)
> а потом уменьшениеПрочитай статью внимательно.
Ну как сказать, снимутся. Превратятся в протечки.
Хотя чтобы FFFFFFFF рефкаунтов набрать - это надо очень постараться.
Как не специалист, не понимаю, почему нельзя в случае достижения MAX_REFCOUNT заблокировать счетчик ссылок на этом значении? Это имеет какие-то серьезные побочные эффекты(в и без того явно плохом сценарии)?
SystemD + Ubuntu + Gnome + P A С Т = Лучшая ОС на свете!!!
а если занулить?
у тебя ошибка в формуле: несоответствие единиц измерения.
Я понял, это команда фуксии собирается подмять под себя команду ведроида и заложила в ведро бабах на упсы. Дёрнешь тамошний bus1 не так и телефон регулярно перезагружается.А циркон, как понимаете, не падает, потому что такой фичи в нём нет.
> Я понял, это команда фуксии собирается подмять под себя команду ведроида и
> заложила в ведро бабах на упсы.Поэтому другая команда заложила бабах в их менеджмент - опа, 16% команды фуксии уволены?!
Правильнее было бы завершать с соответствующим кодом ошибки приложение, пытающееся разыменовать NULL. И тогда код проверки не будет потреблять чрезмерно ресурсов.
Интересно, что на этот счёт думаю Кен с Ритчи, они же ещё живы. Может убрать уже эти указатели из Си? Одни проблемы от них.
> Может убрать уже эти указателиМожет, убрать уже эти процессоры, одни проблемы от них.
Этот refcount интересен только в состояниях 0 (никого) и 1 (кто-то есть),
все что больше 1 расценивается так же как и 1.
В ядре есть лимиты, pid_max, max_map_count, от них и надо прыгать.
Если refcount начал переваливать за эти пределы, прибивать нахрен процесс
с сообщением "Тюнюнгуй свой хелловорд, пейсатель".
Домашнее задание:Найти там же, в mm_struct, Sequence counter и создать похожий эксплойт.
Стоп, refcount 32х битный?
Да поставить 128 битный. Обязательно временно.
Склеенное скотчем держится веками.
И проблема решена! ;)