> А ктото говорил что не было ошибок в вин32к ;) Причем своими глазами я видел только 2.
> Просто надо хорошо поискать. Судя по спертым сырцам винды > код win32k - еще те макароны.. А в них баги всегда есть) Это да. Хотя наверное за всем этим есть какой то скрытый смысл - а если есть внутренняя логика, то неважно как оно выглядит внешне - ошибок будет мало. Хороший пример - автогенеренный код. Такой нечитабельной каши не напишет ни одна кодманки, а работает оно идеально :-)
Предисловие: привет amirul ;)
Давече дописывал тут одну свою фриварную тулзу (HKM) и напоролся на бсод, вызываемый юзермодным кодом без админских прав. workaround от бсода я придумал, ибо негоже мелкой тулзе винду убивать, но сам бсод - есть баг микрософтовский. И вот относительно минимальный, исключительно юзермодный код, которым он воспроизводится:
Готовый проект для VC6 (с откомпиленными бинарями) можно скачать тут: http://slil.ru/26296017 Исходники, а то долго рассказывать что код делает:
hookproc.dll:
---,
BSOD'ятся или жестко зависают в течении нескольких минут работы проги 2к3 на одноядерном атлоне, и Vista x86 на двухядерном интеле.
Стек бсода с висты:
А ктото говорил что не было ошибок в вин32к ;)
Просто надо хорошо поискать. Судя по спертым сырцам винды код win32k - еще те макароны.. А в них баги всегда есть)
Ну тогда мне выдали 2. Это третья04.11.08 11:36 Автор: amirul <Serge> Статус: The Elderman
> А ктото говорил что не было ошибок в вин32к ;) Причем своими глазами я видел только 2.
> Просто надо хорошо поискать. Судя по спертым сырцам винды > код win32k - еще те макароны.. А в них баги всегда есть) Это да. Хотя наверное за всем этим есть какой то скрытый смысл - а если есть внутренняя логика, то неважно как оно выглядит внешне - ошибок будет мало. Хороший пример - автогенеренный код. Такой нечитабельной каши не напишет ни одна кодманки, а работает оно идеально :-)
Проблема такого кода в том что его модифицировать опасно...04.11.08 11:50 Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 04.11.08 11:55 Количество правок: 2
> Это да. Хотя наверное за всем этим есть какой то скрытый > смысл - а если есть внутренняя логика, то неважно как оно > выглядит внешне - ошибок будет мало. Хороший пример - > автогенеренный код. Такой нечитабельной каши не напишет ни > одна кодманки, а работает оно идеально :-) Проблема такого кода в том что его модифицировать опасно. Особенно без полного набора тестов на функционал и безопасность. Одинаково опасно модифицировать и кашу кодманки и кодогенератора :)
Что похоже и имело место тут. Т.к. ХР не свалилась за ночь издевательства десктопами. А 2к3/Виста валятся в первые 10 секунд. Могу даже дальше пофантазировать и предположить что изменения в коде были вызваны введением UAC и необходимостью разграничения доступа к user32 объектам между различными IL. Впрочем непонятно почему 2к3 поломали по сравнению с ХР. Может, там уже в win32k сделали эти изменения - на будущее :)
Согласен04.11.08 21:34 Автор: amirul <Serge> Статус: The Elderman
> Проблема такого кода в том что его модифицировать опасно. > Особенно без полного набора тестов на функционал и Тесты то есть. И кавередж тоже. Вот только рейсы не выявляются ни одним кодкавереджем.
> безопасность. Одинаково опасно модифицировать и кашу > кодманки и кодогенератора :) Ага :-)
В общем пошло обсуждение и вроде бы нашли related issue.
И тебе привет :-)02.11.08 10:04 Автор: amirul <Serge> Статус: The Elderman
> Давече дописывал тут одну свою фриварную тулзу (HKM) и > напоролся на бсод, вызываемый юзермодным кодом без > админских прав. workaround от бсода я придумал, ибо негоже > мелкой тулзе винду убивать, но сам бсод - есть баг Негоже.
> микрософтовский. И вот относительно минимальный, > исключительно юзермодный код, которым он воспроизводится: Сейчас поздно. Завтра попробую потестить, а с понедельника опять таки попробую найти куда бы это протолкнуть.
На работе проверил на ХР и Висте х64. ХР вроде не падает а...03.11.08 15:25 Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 03.11.08 15:27 Количество правок: 1
> > микрософтовский. И вот относительно минимальный, > > исключительно юзермодный код, которым он > воспроизводится: > Сейчас поздно. Завтра попробую потестить, а с понедельника > опять таки попробую найти куда бы это протолкнуть. На работе проверил на ХР и Висте х64. ХР вроде не падает, а виста 64битная - тоже грохнулась как и 32хбитная. Причем уменьшение Sleep(500) до Sleep(100) значительно ускоряет процесс :)
Похоже гдето гонка в win32k в снятии хуков.
Кстати обе висты проапдейтенные по самое не балуй.
Есть репродюс на висте и одной из последних сборок вин7 :-)03.11.08 21:58 Автор: amirul <Serge> Статус: The Elderman
> На работе проверил на ХР и Висте х64. ХР вроде не падает, а > виста 64битная - тоже грохнулась как и 32хбитная. Причем > уменьшение Sleep(500) до Sleep(100) значительно ускоряет > процесс :) > Похоже гдето гонка в win32k в снятии хуков. > Кстати обе висты проапдейтенные по самое не балуй.
Буду искать куда бы это запихать (сам я баг открыть не могу - ибо совершенно в другой команде).
Многократное переключение между Win32 объектами рабочих столов, на которых есть окна, с одновременным созданием потоков, устанавливающих/снимающих Win32 хуки на этих столах и рассылающих оконные сообщений на них в половине случаев приводит к BSODу изза AV в коде win32k.sys, а в другой половине - к зависанию системы. Происходит это предположительно изза race condition между потоком, снимающим хук и одновременной доставкой сообщения в другой поток. В этих условиях проблема воспроизводится под win'2k3, Vista x86 и x64. Для проведения атаки достаточно прав обычного пользователя.
Предположительно изза race condition с потоком который снимает хук и одновременной доставкой сообщения в другой поток. Похоже оно пытается вызвать только что убитый хук. Имеют ли прямое отношение десктопы к этому, или просто оно приводят к каким либо особенным условиям тайминга исполнения плохо синхронизированного кода - пока хз. В дампе ничего напрямую про десктопы не видно. Но без них воспроизвести пока не получилось.