В Windows обнаружена ошибка, вызывающая взаимную блокировку

Тема в разделе "Новости из СМИ", создана пользователем Stelliton, 1 фев 2018.

  1. Stelliton

    Stelliton Moder Модератор форума

    [​IMG]
    Проблема затрагивает версии операционной системы с 8-й по 10-ю.

    Пользователь GitHub под псевдонимом leo-yuriev сообщил об уязвимости в версиях Windows с 8-й по 10-ю, вызывающей взаимную блокировку (deadlock) в файловых операциях.

    • Процедуры из трех операций LockFile + WriteFile + UnlockFile;

    • Два потока, конкурентно выполняющие процедуру;

    • В результате возникает взаимная блокировка между потоками, но процесс можно убить без видимых последствия для ядра.
    В качестве побочного эффекта замечено, что в результате взаимной блокировки утилита Process Hacker для мониторинга системных процессов и служб не может получить имя файла по проблемному хендлу. Хендл становится "unnamed" и исчезает из отображаемого набора (при наличии соответствующего флажка по умолчанию).

    Примерные трейсы из ядра из 8.1-ent

    Стек первого потока:

    nt!KiSwapContext+0x7a
    nt!KiCommitThreadWait+0x1d2
    nt!KeWaitForSingleObject+0x19f
    nt!IopSynchronousServiceTail+0x2a9
    nt!NtLockFile+0x514
    nt!KiSystemServiceCopyEnd+0x13

    Стек второго потока:
    nt!KiSwapContext+0x7a
    nt!KiCommitThreadWait+0x1d2
    nt!KeWaitForSingleObject+0x19f
    nt!IopAcquireFileObjectLock+0x84
    nt! ?? ::NNGAKEGL::`string'+0x491d5
    nt!KiSystemServiceCopyEnd+0x13

    С работающим тест-кейсом можно ознакомитьсяздесь.

    Взаимная блокировка – ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, занятых самими этими процессами.
    По поводу рекламы писать в ЛС!
    08.03


    26.04
     

Поделиться этой страницей