информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медПортрет посетителяЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 На GitHub пугают ложными предупреждениями... 
 Атака на пользователей больших... 
 Notepad++ полгода раздавал зараженные... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / operating systems
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[NT] Управление питанием 22.01.03 11:25  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
На днях отлаживал драйвер, нашел свою ошибку, исправил. Но по-пути пришел к выводу что в системе управления питанием W2K/XP и т.д. возможен "корректный" deadlock.
Возможно что я ошибаюсь, вот собственно поэтому и хочу обсудить...

1) Имеем два устройства "bus enumerator" - BusFDO и его "child device" - ChildPDO. Оба устройства без DO_POWER_INRUSH;
2) Предположим что в некоторый момент времени BusFDO был в PowerDeviceD1, а ChildPDO в PowerDeviceD2;
3) Далее юзер начинает использовать ChildPDO, и function-драйвер над ChildPDO запускает запрос на PowerDeviceD0 для стека ChildPDO;
4) Предположим, что одновременно с этим истекает интервал IdleDetection для BusFDO, и "Power Manager" запускает запрос на PowerDeviceD3 для BusFDO (или еще как-нибудь возникает запрос на PowerDeviceD3);
5) Далее bus-драйвер для ChildPDO запускает запрос на PowerDeviceD0 для BusFDO и ждет результата, при этом power-стек ChildPDO остается занятым;
6) Но и стек BusFDO уже занят запросом PowerDeviceD3, причем драйвер BusFDO сначала выключит все child-устройства, и только потом продолжит обработку запроса на PowerDeviceD3;
7) В итоге получается deadlock между запросами, и его нельзя просто "развязать" в bus-драйвере, потому что обработка power-запросов должна быть последовательной хотя и асинхронной, и всегда начинаться с верхушки стека;

Ну хоть кто-нибуть что-нибудь понял ?
[NT] Управление питанием 22.01.03 12:12  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
> На днях отлаживал драйвер, нашел свою ошибку, исправил. Но
> по-пути пришел к выводу что в системе управления питанием
> W2K/XP и т.д. возможен "корректный" deadlock.
> Возможно что я ошибаюсь, вот собственно поэтому и хочу
> обсудить...
>
> 1) Имеем два устройства "bus enumerator" - BusFDO и его
> "child device" - ChildPDO. Оба устройства без
> DO_POWER_INRUSH;
> 2) Предположим что в некоторый момент времени BusFDO был в
> PowerDeviceD1, а ChildPDO в PowerDeviceD2;
> 3) Далее юзер начинает использовать ChildPDO, и
> function-драйвер над ChildPDO запускает запрос на
> PowerDeviceD0 для стека ChildPDO;
> 4) Предположим, что одновременно с этим истекает интервал
> IdleDetection для BusFDO, и "Power Manager" запускает
> запрос на PowerDeviceD3 для BusFDO (или еще как-нибудь
> возникает запрос на PowerDeviceD3);
> 5) Далее bus-драйвер для ChildPDO запускает запрос на
> PowerDeviceD0 для BusFDO и ждет результата, при этом
> power-стек ChildPDO остается занятым;
> 6) Но и стек BusFDO уже занят запросом PowerDeviceD3,
> причем драйвер BusFDO сначала выключит все
> child-устройства, и только потом продолжит обработку
> запроса на PowerDeviceD3;
> 7) В итоге получается deadlock между запросами, и его
> нельзя просто "развязать" в bus-драйвере, потому что
> обработка power-запросов должна быть последовательной хотя
> и асинхронной, и всегда начинаться с верхушки стека;
>
> Ну хоть кто-нибуть что-нибудь понял ?

А разве повер манагер по таймауту от повердевайса0 не отвалится?
[NT] Re: А разве 22.01.03 13:02  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
> А разве повер манагер по таймауту от повердевайса0 не
> отвалится?

Как он может отвалиться если на стеке активный IRP-запрос без IoCancel.
[NT] Тады "Ой!"... :) Видимо, будет клинч... 22.01.03 15:14  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach