LINUX.ORG.RU

Mono написали обезьяны


0

0

Не с проста идут слухи о том, что Mono написали обезьяны. Как видно на скриншоте, они выделили память в стеке функцией alloca и... НАМЕРЕННО не делали никаких проверок на переполнение. Спрашивается, как такое могло попасть в стабильный релиз, да еще так открыто быть упомянутым - типо на те, хакеры, пользуйтесь. Этож переполнение буфера в самом классическом определении!

>>> Просмотр (1054x867, 120 Kb)

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

знаю, а Java называлась Oak потому что дубовая.

старо, как говно мамонта.


nicebytes
()

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

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

> хм... в упор не вижу возможности переполнения(. А то что выделяются два указателя под одну область памяти, преступление не является)) Если не прав, то поправь...

Может автор скрина намекает на magic numbers(8, 7, 512) в размерах?

YesSSS ★★★
()

Почему "НАМЕРЕННО" ? Комментарий FIXME означает, что разработчики видят проблему и оставили её на потом, т.к. на самом деле, переполнение стека на функции alloca() - маловероятное событие, если вызывающая функция не рекурсивная.

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

> хм... в упор не вижу возможности переполнения(. А то что выделяются два указателя под одну область памяти, преступление не является)) Если не прав, то поправь...

man alloca

Функция alloca() выделяет память в стеке и если произошло переполнение стека, то поведение функции не определено. В мануале,кстати, написано "On many systems its implementation is buggy. Its use is discouraged". Т.е. использование этой функции сильно не рекомендуется.

KtaK ★★
()

В ядре таких мест до хренища. И ниче, никто не ссыт в компот.

Relan ★★★★★
()

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

Что мешает написать:

unsigned char p[512];
unsigned char *code_buffer = p;

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

Просто динамическая память - это круто, вот и весь секрет :)

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

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

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

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

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

>Почему "НАМЕРЕННО" ? Комментарий FIXME означает, что разработчики видят проблему и оставили её на потом

Ну вот в том-то и проблема, что "на потом". Если они ее видят, то пока могли бы обойтись и обычным malloc'ом.

xTERM ★★
() автор топика

Напиши патч, вышли разработчикам...

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

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

dave ★★★★★
()

Хм, как на новеньких орать, что они нифига не шарят так это сила, а вот gedit никто и не увидел, где же сила линукс привычки юзать vim или emacs? мне казалось - это первое что надо заучить, особенно, если начинаешь с консоли... а скрин в любом случае кизло, неполный и не обоснованный... кг/ам :q

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

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

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

> где же сила линукс привычки юзать vim или emacs?

Kate - наше всё!

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

> nicebytes, ты все время пеаришь свой Puppy :)))

есть немного, но я сдерживаюсь :)

nicebytes
()

МонО.... зачем оно... ?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.