Выпуск новостей ReactOS №62

Z98 [reactos.org], “ReactOS Newsletter #62”, public translation into Russian from English More about this translation.

See also 38 similar translations

Translate into another language.

Participants

Alex.Pancho638 points
seven_ro229 points
bz00mmer168 points
And others...
Join Translated.by to translate! If you already have a Translated.by account, please sign in.
If you do not want to register an account, you can sign in with OpenID.
Pages: ← previous Ctrl next
1 2 3

ReactOS Newsletter #62

Выпуск новостей ReactOS №62

History of edits (Latest: bz00mmer 2 years, 10 months ago) §

PSEH Corruption

Порча данных в PSEH

History of edits (Latest: bz00mmer 2 years, 10 months ago) §

In NT operating systems, structured exception handling is used to help safeguard probing of user mode memory buffers and pageable memory while in kernel mode. This requirement was what motivated the creation of the PSEH library by KJK::Hyperion since GCC does not have support for it. Since the last attempt to add SEH support to GCC failed, ReactOS remains dependent on PSEH. Recently, the ARM team committed some code which exposed a very nasty bug in the PSEH library and investigation of the issue led KJK to discover another bug while analyzing the code. Both were fairly serious, as they ended up causing major problems when exceptions were thrown.

В операционных системах семейства NT структурированная обработка исключений (SEH) используется для безопасного освобождения буферов памяти пользовательского режима и страничной памяти в режиме ядра. Это требование мотивировало KJK::Hyperion на создание библиотеки PSEH, так как GCC не имеет поддержки SEH. Так как недавняя попытка добавить её поддержку в GCC провалилась, ReactOS по-прежнему зависит от PSEH. Недавно команда ARM внесла некоторый код, который вызвал очень неприятную ошибку в библиотеке PSEH и расследование причин подвело KJK к обнаружению ещё одной ошибки в процессе анализа кода. Обе эти ошибки являются серьёзными, так как они оказались причиной крупных проблем при возникновении исключений.

History of edits (Latest: h1bymask 2 years, 10 months ago) §

— Может уже разместим?  Alex.Pancho

— Согласен: на вид все OK, да и оригинал уже неделю как опубликован h1bymask

The first bug involved nested try/catch blocks, wherein if an exception was raised and caught in the inner block and another exception was raised in the outer block, the code would jump not to the outer block's catch statement but the inner block. Execution would then progress from the inner block again and result in an infinite loop as the code constantly jumps back. What was effectively happening was that the trylevel for the inner block was not being popped when the code left the block and were left on the stack, which made PSEH think it was still in the inner block. This of course rendered the OS unusable when the bug was triggered, which was what happened after the ARM commit and a test in the automated testing combined to trigger it. With some help from Stefan Ginsberg, KJK managed to find the cause of the bug in the nested try/catch blocks and automated testing is now working again.

Первая ошибка связана с вложенными блоками try/catch, в которых при возникновении и обработке исключения во внутреннем блоке и возникновении второго исключения во внешнем, управление может передаваться не внешнему блоку catch, а внутреннему. Код продолжит исполняться опять с внутреннего блока, что приведет к бесконечному циклу (из-за непрерывной передачи управления обратно). Проблема была в том, что при выходе из блока значение переменной, отвечающей за уровень вложенности, не загружалось из стека, так и оставаясь в нем, из-за чего PSEH считал, что он по-прежнему во внутреннем блоке. Это, конечно же, делало ОС непригодной для использования, когда происходила ошибка. Так и случилось после внесения кода ARM в репозиторий и автоматического теста, составленного для выявления ошибок. С небольшой помощью Стефана Гинсберга, KJK удалось найти причину этой ошибки с вложенными блоками try/catch, и в настоящее время автоматическое тестирование опять работает.

History of edits (Latest: virus 2 years, 10 months ago) §

— Из головы вылетел термин... Порождение исключения? Или как возникновение грамотно зовётся? bz00mmer

Comment was deleted

— эээ, какой нафиг try/catch??? там же должно быть __try, __except, __finally. Может не будем копировать ошибку из оригинала? fox_anthony

— на самом деле, в ReactOS вообще используются конструкции вида _SEH2_TRY, _SEH2_EXCEPT, _SEH2_END, так что я бы оставил просто try/catch как обозначение h1bymask

— да, это и есть pseudo SEH fox_anthony

The second bug is somewhat similar to the first one, in that the execution frame of the exception was not removed from the stack, which would have a completely random result. The really bad thing about this was that this bug could be triggered without nested try/catch blocks so that even while it did not stall the OS, it essentially resulted in random stack corruption which could affect other things and eventually cause hard to trace corruptions. Since this was happening every time an exception was raised in SEH, it would not be surprising if it was the cause of many random crashes ReactOS has suffered since the introduction of PSEH2. Ironically, an identical problem also existed in PSEH1 and also had the same fix. KJK's PSEH test suite also helped, once he added a sanity check that was missing. Of course, adding that check resulted in his code failing the majority of the tests until he fixed the bug.

Вторая ошибка несколько похожа на первую тем, что фрейм стека, в контексте которого выполняется обработка исключения, не удалялся, что приводит к абсолютно непредсказуемым результатам. Настоящая проблема в том, что эта ошибка может активироваться без вложенных блоков try/catch, даже если она не тормозит ОС, то все равно приводит к случайным повреждениям стека, что может повлиять на другие аспекты, и, в итоге, сильно усложняет поиск ошибок. Поскольку это происходило постоянно при возникновении исключения в SEH, нет ничего удивительного в случайных сбоях ReactOS после введения PSEH2.По иронии судьбы, идентичная проблема также существует в PSEH1, и имеет те же причины. Набор тестов PSEH KJK также помог, как только он добавил проверку исправности, которой небыло. Конечно, добавление результатов проверки в его код провалило большинство тестов до тех пор, пока он исправит ошибки.

History of edits (Latest: h1bymask 2 years, 10 months ago) §

— Execution frame of the exception - полагаю, что это фрейм стека, в контексте которого исполняется блок try...catch (т.е. "исполняющий фрейм исключений" звучит некорректно). h1bymask

Pages: ← previous Ctrl next
1 2 3