LINUX.ORG.RU

Предотвращение race conditions


0

0

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

>>> Подробности

★★★★★

Проверено: Demetrio ()

огромное спасибо. классная статья.

eXOR ★★★★★
()

>использовать race conditions для того, чтобы ронять чужие серверы

IMHO, ударом с ноги его уронить удобнее.

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

Поддерживаю - положить рейсом это сложно - факт! Его и на собственном-то коде повторить сложно а на чужом....

anonymous
()

[shaman@shaman007 shaman]$ gcc test.c test.c: In function `main': test.c:13: warning: assignment makes pointer from integer without a cast /tmp/ccmD8oqV.o(.text+0x1b): In function `main': : warning: the use of `tempnam' is dangerous, better use `mkstemp' [shaman@shaman007 shaman]$

Нда, а они вот тут пишут:

You could try to use mkdtemp(3), but this is generally a bad idea because temp cleaners may decide to erase them.

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

> Короче, чем плох mktemp()?

Тем, что между получением имени и созданием файла возникает race. Поэтому использовать надо mkstemp и mkdtemp.

baka-kun ★★★★★
()
Ответ на: комментарий от Shaman007

> Ну да, я в плане того, зачем городить огород, описанный в статье?

С циклом? Так это реализация mkstemp, если не доверяешь системной ;)

baka-kun ★★★★★
()

Статья интересная, только в конце что-то странное написано:

Programs can register to handle various kinds of signals, but signals can happen at the most inopportune times, including while you're already handling another signal.

Похоже, товарищ не знает о существовании sa_mask в struct sigaction.
Или я чего упустил?

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

>Статья интересная, только в конце что-то странное написано:

>Programs can register to handle various kinds of signals, but signals can happen at the most inopportune times, including while you're already handling another signal.

>Похоже, товарищ не знает о существовании sa_mask в struct sigaction. Или я чего упустил?

Товарисч имел ввиду вот эту статью

http://www.netsys.com/library/papers/signals.txt

sS ★★★★★
()

Тогда кто-нибудь может сказать: а как создавать безопасно временные файлы из шела? Добавлять к имени ещё случайное число? Или и этого мало?

atrus ★★★★★
()

По-русски race condition называется "состояние гонки" или "условие гонки". Давайте не будем делать разноязычную мешанину в новостях.

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

> По-русски race condition называется "состояние гонки" или "условие гонки". Давайте не будем делать разноязычную мешанину в новостях.

не согласен:

``race condition'' -- это TERM

"состояние гонки" или "условие гонки" -- чёрти что и с боку бантик, и не понятно о чём вообще речь идёт

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

> По-русски race condition называется "состояние гонки" или "условие гонки".

Только у плохих переводчиков.

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

> По-русски race condition называется "состояние гонки" или "условие гонки". Давайте не будем делать разноязычную мешанину в новостях.

Это ты просто теорию операционных систем не учил. Race condition это race condition и есть.

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

А где можно прочитать почему именно так?

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

> В переводной литературе так.

В какой нах переводной литературе? Сколько ты видел таких переводов и
кто их переводил? "Один идиот написал" == "вся переводная литература"?
Так такие же горе-переводчики создают шедевры типа автобусных ошибок.

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

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

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

Я бы предложил такой перевод (если он вообще кому-то нужен):
"Несогласованный конкурентный доступ к ресурсам". Просто и ясно.
Но длинно. Однако, если учесть тот факт, что русские слова и фразы
как правило заметно длиннее английский аналогов, то жить с этим можно.

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

потому что многих тут есть сервера как на линухе, так и на БСД

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

Я всегда думал, что race condition на русский переводится как "эффект гонки" и, что это вполне устоявшийся перевод.

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

> man mktemp

tnx, я когда читал, почему-то подумал, что это тоже функция сишная... ;-)))

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

Этот перевод только для форума подойдет, в книге или статье он смотреться не будет.

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

Что-то типа того.

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

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

Забыл. Естественно, что каждый раз писать определение вместо двух слов нехорошо.

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

P.S. Американизмы нужно применять к месту, а не совать во все дыры.

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

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

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

> правильность работы программы зависит от того, успела или нет она проскочить ничем незащищенный критический участок.

Именно.

А в шельниках для предотвращения race всю жизнь применяли `mkdir -p 700`.

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

> Наверное гонки, не потому, что кто-то кого-то обгоняет, а потому

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

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

Тупой или не тупой - смысл понятен практически сразу. А понятен ли смысл рэйс, если еще учесть, что часть будут произносить как рейс, который сам по себе наличествует в русском языке?

P.S. А потом приходишь и тебя начинают лечить -
мы разрабатываем полиси (требования)
вы делегируете нам полномочия (дать права/назначить временным помощником)
девельный отдел

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

> рэйс, если еще учесть, что часть будут произносить как рейс,

А это разные рейсы или таки один и тот же, но контекстно-зависимый?

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

>> Похоже, товарищ не знает о существовании sa_mask в struct sigaction.
> Товарисч имел ввиду вот эту статью
Нет, не имел. В "этой статье" речь о том, что нельзя некоторые
функции из обработчика сигнала вызывать - это и так всем известно,
и на эту статью он ссылается в другом месте.
А в том тексте, что я процитировал, он говорит, что сигнал может
неожиданно прийти, даже когда ты обрабатываешь другой сигнал.
Я с этим не согласен. Для этого есть sa_mask, и он отлично
работает.

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

>По-русски race condition называется "состояние гонки" или "условие гонки". Давайте не будем делать разноязычную мешанину в новостях.

Не. Я не знаю, кто у вас на ЭКТ преподавал схемотехнику (и была ли такая), но у нас это называлось просто "гонки". Без "состояние" и "условие". Однако я более склоняюсь в тому, что высказано товарищами выше: "race condition" - действительно устоявшийся термин, причём _сразу_ понятно, о чём речь, в отличие от "гонок".

К слову: "Всплеск" вон тоже красивый термины, а "вейвлет" изжить всё-равно не может.

//Loseki

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

> А в том тексте, что я процитировал, он говорит, что сигнал может неожиданно прийти, даже когда ты обрабатываешь другой сигнал. Я с этим не согласен. Для этого есть sa_mask, и он отлично работает.

Сигналы, генерируемые синхронно в ответ на события в коде (доступ в незамапленую память => SIGSEGV, неизвестная команда => SIGILL, и так далее) не маскируются независимо от sa_mask. (А если будут маскироваться - это будет только хуже для платформы)

Так что нужно и это учитывать.

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

> Не. Я не знаю, кто у вас на ЭКТ преподавал схемотехнику (и была ли такая), но у нас это называлось просто "гонки". Без "состояние" и "условие". Однако я более склоняюсь в тому, что высказано товарищами выше: "race condition" - действительно устоявшийся термин, причём _сразу_ понятно, о чём речь, в отличие от "гонок".

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

Я уважаю терминологию схемотехников, но мне больше нравится другой комплект терминов: _обгон_ и _возможность обгона_. Кстати, они в том числе и понятны всем кто знает про "гонки", звуча как известное понятие в непривычном оформлении.

netch
()
Ответ на: комментарий от baka-kun

> А в шельниках для предотвращения race всю жизнь применяли `mkdir -p 700`.

Это используется не только в шеллах (например, в CVS), но это дороговато.

В современных системах O_NOFOLLOW+O_CREAT+O_EXCL достаточен для локальных FS. Для удалённых - да, mkdir - метод убойный, но работающий. Впрочем, для критических применений всё равно используют отдельные каталоги временных файлов, без o+w.

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

А что ты предлогаешь? "Несогласованный конкурентный доступ к ресурсам"? Так это уже не термин, а определение, при том еще и неполное (race conditions могут возникать не только при конкурентном доступе).

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

Когда ты встретишь термин "функция расстановки", тоже будет непонятно о чем речь?

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

> IMHO, ударом с ноги его уронить удобнее.

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

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