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